home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 095 / rbbssrc1.arc / CONFIG.BAS < prev    next >
BASIC Source File  |  1987-03-15  |  182KB  |  4,527 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG V3.00, Copyright 1983-87 by D. Thomas Mack'
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC ver. CPC15.1A)
  5.       ' by D.Thomas Mack
  6.       '   The Second Ring
  7.       '   10210 Oxfordshire Road
  8.       '   Great Falls, Virginia 22066
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. CPC15.1), to make copies of this  *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with D. Thomas Mack, The Second Ring, 10210*
  22.       ' *        Oxfordshire Road, Great falls, Virginia 22006                *
  23.       ' *                                                                     *
  24.       ' *      Copyright (c) 1983-1987 D. Thomas Mack, The Second Ring        *
  25.       ' ***********************************************************************
  26. '     $INCLUDE: 'CNFG-VAR.BAS'
  27.       CLEAR
  28. '
  29. ' *****************************************************************************
  30. ' *  DISPLAY THE CONFIG TITLE PAGE                                            *
  31. ' *****************************************************************************
  32. '
  33.       WIDTH 80
  34.       CLS
  35.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  36.       NUM.FILES = 7
  37.       NUM.GLOBAL = 4
  38.       NUM.MAIN = 17
  39.       NUM.SYSOP = 7
  40.       NUM.UTILITY = 11
  41.       I! = FRE(C$)
  42.       KEY OFF
  43.       PRINT TAB(60)"tm"
  44.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  45.       PRINT
  46.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  47.       PRINT
  48.       PRINT TAB(5) CHR$(214)STRING$(67,196)CHR$(183)
  49.       FOR I = 1 TO 12
  50.         READ A$
  51.         PRINT TAB(5) CHR$(186);A$;SPACE$(67-LEN(A$));CHR$(186)
  52.       NEXT
  53.       PRINT TAB(5) CHR$(211)STRING$(67,196)CHR$(189)
  54.       PRINT "  Copyright (c) 1983-1987 Tom Mack, 10210 Oxfordshire Rd, Great Falls, VA"
  55.       DATA "    If you are using RBBS-PC CPC15.1 and find it valuable, I
  56.       DATA "    suggest you consider a contribution to
  57.       DATA "
  58.       DATA "                 Capital PC Software Exchange
  59.       DATA "                     Post Office Box 6128
  60.       DATA "                Silver Spring, Maryland  20906
  61.       DATA ""
  62.       DATA "    You are free to copy and share RBBS-PC CPC15.1 with
  63.       DATA "    others on these three conditions:
  64.       DATA "      1.  This program is not distributed in modified form.
  65.       DATA "      2.  No fee or consideration is charged.
  66. 10230 DATA "      3.  This notice is not bypassed or removed.
  67. '
  68. ' *****************************************************************************
  69. ' *  DEFINE THE FUNCTIONS USED BY CONFIG                                      *
  70. ' *****************************************************************************
  71. '
  72.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60) _
  73.                          + (VAL(MID$(TIME$,4,2))*60) _
  74.                          + (VAL(MID$(TIME$,7,2))*1)))
  75.       DEF FNHSH(X$) = ((ASC(X$)*100  _
  76.                          +  ASC(MID$(X$,LEN(X$)/2,1))*10  _
  77.                          +  ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF)  +  1
  78.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1))*10  +  7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  79.       DELAY!    = FNTI! + 5
  80. 10480 IF FNTI! < DELAY! THEN _
  81.          GOTO 10480
  82. 10490 LOCATE 22,15
  83.       PRINT SPC(64)
  84.       IF COMMAND$ <> "" THEN _
  85.         CONFIG.FILENAME$ = COMMAND$: _
  86.         GOTO 10530
  87.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  88.       LOCATE 22,10
  89.       PRINT "Will you be running multiple copies of RBBS-PC (YES or NO)?";
  90.       GOSUB 22380
  91.       ON AB GOTO 10530,10510,10490,10490
  92. 10510 GOSUB 22480
  93.       '
  94. '
  95. ' *****************************************************************************
  96. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS                     *
  97. ' *****************************************************************************
  98. '
  99. 10530 ON ERROR GOTO 60010
  100.       FILE$ = CONFIG.FILENAME$
  101.       GOSUB 30000
  102.       M$ = "Z"
  103.       IF OKAY THEN _
  104.          CALL CNFGINIT : _
  105.          GOSUB 15790 : _
  106.          GOTO 10536
  107.       GOSUB 31060
  108.       PRINT CONFIG.FILENAME$ + " file not found.  A new one will be created.";
  109.       DELAY! = FNTI! + 5
  110.       GOSUB 60440
  111. 10532 GOSUB 31060
  112.       PRINT "Default drive on which RBBS is to reside (A-" + M$ + "): ";
  113.       LINE INPUT;HJ$
  114.       GOSUB 50654
  115.       IF LEN(HJ$)<>1 OR HJ$<"A" OR HJ$>M$ THEN _
  116.          GOTO 10532
  117.       DD$ = HJ$
  118.       CALL CNFGINIT
  119.       GOSUB 15790
  120.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + ":" + BULLETIN.MENU$
  121.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + ":" + BULLETIN.PREFIX$
  122.       GOTO 11710
  123. 10536 OPEN "I",#1,CONFIG.FILENAME$
  124. '
  125. ' *****************************************************************************
  126. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE                *
  127. ' *****************************************************************************
  128. '
  129. 11600 INPUT #1,DOWNLOAD.DRIVES$, _                        ' FD$
  130.                SYSOP.PASSWORD.1$, _                       ' PA$
  131.                SYSOP.PASSWORD.2$, _                       ' PB$
  132.                SYSOP.FIRST.NAME$, _                       ' NB$
  133.                SYSOP.LAST.NAME$, _                        ' NC$
  134.                REQUIRED.RINGS, _                          ' CE
  135.                START.OFFICE.HOURS, _                      ' AC
  136.                END.OFFICE.HOURS, _                        ' AD
  137.                MINUTES.PER.SESSION!, _                    ' TC!
  138.                MAX.ALLOWED.MSGS.FRM.DEF, _                ' MP      (DF)
  139.                ACT.MNTHS.B4.DELETING, _                   ' LA      (DF)
  140.                UPLOAD.DIRECTORY$, _                       ' UF$
  141.                EXPERT.USER, _                             ' XPR
  142.                ACTIVE.BULLETINS, _                        ' BG
  143.                PROMPT.BELL, _                             ' BE
  144.                PCJR, _                                    ' PCJR    (DF)
  145.                CODE.TYPE, _                               ' CL      (DF)
  146.                MENU$(1), _                                ' MG$
  147.                MENU$(2), _                                ' MH$
  148.                MENU$(3), _                                ' MI$
  149.                MENU$(4), _                                ' MJ$
  150.                MENU$(5), _                                ' MK$
  151.                CONFERENCE.MENU$, _                        ' CD$
  152.                CONFERENCE.VIEWER.SEC.LVL, _               ' VA      (DF)
  153.                WELCOME.INTERRUPTABLE, _                   ' OA
  154.                REMIND.FILE.TRANSFERS, _                   ' UD
  155.                PAGE.LENGTH, _                             ' PL
  156.                MAX.MESSAGE.LINES, _                       ' LW
  157.                DOORS.AVAILABLE, _                         ' WB
  158.                MO$                                        ' MO$     (DF)
  159.       GOSUB 22340
  160. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _                      ' ME$
  161.                MAIN.MESSAGE.BACKUP$, _                    ' MF$
  162.                CALLERS.FILE$, _                           ' CB$
  163.                COMMENTS.FILE$, _                          ' CC$
  164.                MAIN.USER.FILE$, _                         ' UC$
  165.                WELCOME.FILE$, _                           ' WA$
  166.                NEWUSER.FILE$, _                           ' NA$
  167.                DIRECTORY.EXTENTION$, _                    ' DIR$
  168.                COM.PORT$, _                               ' M13$
  169.                BULLETINS.OPTIONAL, _                      ' OD
  170.                USER.INIT.COMMAND$, _
  171.                DUMMY6$, _                                 ' TB$
  172.                DOS.VERSION, _                             ' DA
  173.                FG, _                                      ' FGR
  174.                BG, _                                      ' BGR
  175.                BORDER, _                                  ' BDR
  176.                RBBS.BAT$, _                               ' RB$
  177.                RCTTY.BAT$                                 ' CI$
  178.       GOSUB 22340
  179. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _                    ' OB$
  180.                DUMMY$, _                                  ' OC$
  181.                HELP$(3), _
  182.                HELP$(4), _
  183.                HELP$(7), _
  184.                HELP$(9), _                                ' HA$(9)
  185.                BULLETIN.MENU$, _                          ' BA$
  186.                BULLETIN.PREFIX$, _                        ' BB$
  187.                DRIVE.FOR.BULLETINS$, _                    ' BD$     (DF)
  188.                MESSAGE.REMINDER, _                        ' RC
  189.                REQUIRE.NON.ASCII, _                       ' BF
  190.                DOORS.SECURITY.LEVEL, _                    ' SD
  191.                MAXIMUM.NUMBER.OF.NODES, _                 ' MC
  192.                NETWORK.TYPE, _                            ' SE
  193.                RECYCLE.TO.DOS, _                          ' CF
  194.                MAX.USR.FILE.SIZE.FRM.DEF, _               ' UB      (DF)
  195.                MAX.MSG.FILE.SIZE.FRM.DEF!, _              ' MQ!     (DF)
  196.                TRASHCAN.FILE$                             ' BC$
  197.       DONT.ASK = TRUE
  198.       GOSUB 21895
  199.       DONT.ASK = FALSE
  200.       GOSUB 22340
  201. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _                  ' ML
  202.                DEFAULT.SECURITY.LEVEL, _                  ' DB
  203.                SYSOP.SECURITY.LEVEL, _                    ' SB
  204.                FILESEC.FILE$, _                           ' FB$
  205.                SYSOP.MENU.SECURITY.LEVEL, _               ' SC
  206.                LOCAL.PASSWORD$, _                         ' KA$
  207.                MAXIMUM.VIOLATIONS, _                      ' ND
  208.                SYSOP.FUNCTION(1), _                       ' SA(1)
  209.                SYSOP.FUNCTION(2), _
  210.                SYSOP.FUNCTION(3), _
  211.                SYSOP.FUNCTION(4), _
  212.                SYSOP.FUNCTION(5), _
  213.                SYSOP.FUNCTION(6), _
  214.                SYSOP.FUNCTION(7), _                       ' SA(7)
  215.                PASSWORD.FILE$, _                          ' PD$
  216.                MAXIMUM.PASSWORD.CHANGES, _                ' CG
  217.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _      ' CH
  218.                OVERWRITE.SECURITY.LEVEL, _                ' WC
  219.                DOORS.TERMINAL.TYPE, _                     ' MN
  220.                LIMIT.DAILY.TIME                           ' M26
  221.       GOSUB 22340
  222. 11680 INPUT #1,MAIN.FUNCTION(1), _                        ' MD(1)
  223.                MAIN.FUNCTION(2), _
  224.                MAIN.FUNCTION(3), _
  225.                MAIN.FUNCTION(4), _
  226.                MAIN.FUNCTION(5), _
  227.                MAIN.FUNCTION(6), _
  228.                MAIN.FUNCTION(7), _
  229.                MAIN.FUNCTION(8), _
  230.                MAIN.FUNCTION(9), _
  231.                MAIN.FUNCTION(10), _
  232.                MAIN.FUNCTION(11), _
  233.                MAIN.FUNCTION(12), _
  234.                MAIN.FUNCTION(13), _
  235.                MAIN.FUNCTION(14), _
  236.                MAIN.FUNCTION(15), _
  237.                MAIN.FUNCTION(16), _
  238.                MAIN.FUNCTION(17), _
  239.                DUMMY$, _
  240.                WAIT.BEFORE.DISCONNECT                     ' TY
  241.       GOSUB 22340
  242. 11700 INPUT #1,FILES.FUNCTION(1), _                       ' FS(1)
  243.                FILES.FUNCTION(2), _
  244.                FILES.FUNCTION(3), _
  245.                FILES.FUNCTION(4), _
  246.                FILES.FUNCTION(5), _
  247.                FILES.FUNCTION(6), _
  248.                FILES.FUNCTION(7), _
  249.                UTILITY.FUNCTION(1), _                     ' UA(1)
  250.                UTILITY.FUNCTION(2), _
  251.                UTILITY.FUNCTION(3), _
  252.                UTILITY.FUNCTION(4), _
  253.                UTILITY.FUNCTION(5), _
  254.                UTILITY.FUNCTION(6), _
  255.                UTILITY.FUNCTION(7), _
  256.                UTILITY.FUNCTION(8), _
  257.                UTILITY.FUNCTION(9), _
  258.                UTILITY.FUNCTION(10), _
  259.                UTILITY.FUNCTION(11), _
  260.                GLOBAL.FUNCTION(1), _
  261.                GLOBAL.FUNCTION(2), _
  262.                GLOBAL.FUNCTION(3), _
  263.                GLOBAL.FUNCTION(4), _
  264.                UPLOAD.TIME.FACTOR!, _                     ' UPX!
  265.                COMPUTER.TYPE, _                           ' CM
  266.                REMIND.PROFILE, _                          ' CK
  267.                RBBS.NAME$, _                              ' FF$
  268.                COMMANDS.BETWEEN.RINGS, _                  ' M28
  269.                MNP.SUPPORT, _                             ' M29
  270.                PAGING.PRINTER.SUPPORT$, _                 ' MW$
  271.                MODEM.INIT.BAUD$                           ' B$
  272. 11705 INPUT #1,TURN.PRINTER.OFF, _
  273.                DIRECTORY.PATH$, _
  274.                MIN.SEC.TO.VIEW, _
  275.                LIMIT.SEARCH.TO.FMS, _
  276.                DEFAULT.CATEGORY.CODE$, _
  277.                DIR.CATEGORY.FILE$, _
  278.                NEW.FILES.CHECK, _
  279.                MAX.DESC.LEN, _
  280.                SHOW.SECTION, _
  281.                COMMANDS.IN.PROMPT, _
  282.                NEWUSER.SETS.DEFAULTS, _
  283.                HELP.PATH$, _
  284.                HELP.EXTENSION$, _
  285.                MAIN.COMMANDS$, _
  286.                FILE.COMMANDS$, _
  287.                UTIL.COMMANDS$, _
  288.                GLOBAL.COMMANDS$, _
  289.                SYSOP.COMMANDS$
  290.       INPUT #1,UPLOAD.PATH$, _
  291.                FMS.DIRECTORY$, _
  292.                ANS.MENU$,_
  293.                REQUIRED.QUESTIONNAIRE$,_
  294.                REMEMBER.NEW.USERS, _
  295.                SURVIVE.NOUSER.ROOM, _
  296.                PROMPT.HASH$, _
  297.                START.HASH, _
  298.                LEN.HASH, _
  299.                PROMPT.INDIV$, _
  300.                START.INDIV, _
  301.                LEN.INDIV
  302.       INPUT #1,BYPASS.MSGS, _
  303.                MUSIC, _
  304.                RESTRICT.BY.DATE, _
  305.                DAYS.TO.WARN, _
  306.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  307.                CALLBACK.VERIFICATION, _
  308.                RESTRICT.VALID.CMDS, _
  309.                NEW.USER.DEFAULT.MODE, _
  310.                NEW.USER.LINE.FEEDS, _
  311.                NEW.USER.NULLS, _
  312.                NEW.USER.BELL, _
  313.                NEW.USER.CASE, _
  314.                NEW.USER.MARGINS, _
  315.                WRAP.CALLERS.FILE$, _
  316.                REDIRECT.IO.METHOD, _
  317.                GO.TO.SHELL, _
  318.                HALT.ON.ERROR, _
  319.                NEW.PUBLIC.MSGS.SECURITY, _
  320.                NEW.PRIVATE.MSGS.SECURITY, _
  321.                SECURITY.NEEEDED.TO.CHANGE.MSGS, _
  322.                SL.CATEGORIZE.UPLOADS, _
  323.                BAUDOT, _
  324.                TIME.TO.DROP.TO.DOS, _
  325.                EXPIRED.SECURITY, _
  326.                DTR.DROP.DELAY, _
  327.                ASK.IDENTITY, _
  328.                USE.EXTERNAL.XMODEM, _
  329.                BUFFER.SIZE, _
  330.                MLCOM, _
  331.                SHOOT.YOURSELF, _
  332.                F7.MESSAGE$, _
  333.                NEW.USER.DEFAULT.PROTOCOL$, _
  334.                NEW.USER.GRAPHICS$, _
  335.                NET.MAIL$, _
  336.                MASTER.DIRECTORY.NAME$, _
  337.                PROTOCOL.PATH$, _
  338.                UPCAT.HELP$, _
  339.                ALWAYS.STREW.TO$, _
  340.                DUMMY$
  341.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _              ' PC
  342.                MODEM.INIT.WAIT.TIME, _
  343.                MODEM.COMMAND.DELAY.TIME, _
  344.                TURBO.RBBS
  345. 11706 INPUT #1,DNLD.SUB, _                                ' DNLD.SUB
  346.                WILL.SUBDIRS.B.USED, _                     ' M30      (DF)
  347.                UPLOAD.TO.SUBDIR, _                        ' M31
  348.                DOWNLOAD.TO.SUBDIR, _                      ' M32      (DF)
  349.                UPLOAD.SUBDIR$, _                          ' M33$
  350.                RESTRICT.BAUD, _                           ' M34
  351.                USE.COLOR, _                               ' M35
  352.                DISKFULL.GO.OFFLINE, _                     ' M36
  353.                EXTENDED.LOGGING, _                        ' M37
  354.                USER.RESET.COMMAND$, _
  355.                USER.COUNT.RINGS.COMMAND$, _
  356.                USER.ANSWER.COMMAND$, _
  357.                USER.GO.OFFHOOK.COMMAND$, _
  358.                DISK.FOR.DOS$, _                           ' M38$
  359.                DUMB.MODEM, _                              ' M39
  360.                COMMENTS.AS.MESSAGES, _                    ' M40
  361.                LSB, _                                     ' LSB
  362.                MSB, _                                     ' MSB
  363.                LINE.CONTROL.REGISTER, _                   ' LCR
  364.                MODEM.CONTROL.REGISTER, _                  ' MCR
  365.                LINE.STATUS.REGISTER, _                    ' LSR
  366.                MODEM.STATUS.REGISTER                      ' MSR
  367.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  368.          GOTO 11710
  369.       FOR I = 1 TO DNLD.SUB
  370.           INPUT #1,DNLD$(I)
  371.       NEXT
  372. 11710 GOSUB 22340
  373. '
  374. ' *****************************************************************************
  375. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED       *
  376. ' *****************************************************************************
  377. '
  378.       BULLETIN.MENU$ = RIGHT$(BULLETIN.MENU$,(LEN(BULLETIN.MENU$)-2))
  379.       BULLETIN.PREFIX$ = RIGHT$(BULLETIN.PREFIX$,(LEN(BULLETIN.PREFIX$)-2))
  380.       IF RECYCLE.TO.DOS = 0 THEN _
  381.          RECYCLE.TO.DOS$ = "INTERNAL" ELSE _
  382.          RECYCLE.TO.DOS$ = "SYSTEM
  383.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3))-1)
  384.       SF = SYSOP.FUNCTION(1)
  385.       GOSUB 16062
  386.       FOR I = 2 TO NUM.SYSOP
  387.         IF SYSOP.FUNCTION(I)   > SF THEN _
  388.            GOTO 11790
  389.       SF = SYSOP.FUNCTION(I)
  390. 11790 NEXT
  391.       MM = MAIN.FUNCTION(1)
  392.       FOR I = 1 TO NUM.MAIN
  393.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  394.         IF MAIN.FUNCTION(I)    > MM THEN _
  395.            GOTO 11810
  396.       MM = MAIN.FUNCTION(I)
  397. 11810 NEXT
  398.       FC = FILES.FUNCTION(1)
  399.       FOR I = 1 TO NUM.FILES
  400.         FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  401.         IF FILES.FUNCTION(I)   > FC THEN _
  402.            GOTO 11830
  403.       FC = FILES.FUNCTION(I)
  404. 11830 NEXT
  405.       UE = UTILITY.FUNCTION(1)
  406.       FOR I = 1 TO NUM.UTILITY
  407.         UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  408.         IF UTILITY.FUNCTION(I) > UE THEN _
  409.            GOTO 11850
  410.       UE = UTILITY.FUNCTION(I)
  411. 11850 NEXT
  412.       FOR I = 1 TO NUM.GLOBAL
  413.         GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  414.       NEXT
  415.       CLOSE #1
  416.       GOSUB 22340
  417.       GOSUB 50480
  418.       GOSUB 22340
  419.       GOSUB 50530
  420.       GOSUB 22340
  421. 11870 IF EXPERT.USER = 0 THEN _
  422.          EXPERT.USER$ = "NOVICE
  423.       IF EXPERT.USER = -1 THEN _
  424.          EXPERT.USER$ = "EXPERT
  425.       DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  426.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$)-1))
  427.       PROMPT.BELL$ = "ON"
  428.       IF PROMPT.BELL = 0 THEN _
  429.          PROMPT.BELL$ = "OFF
  430.       CODE.TYPE$ = "BASICA"
  431.       IF CODE.TYPE = TRUE THEN _
  432.          CODE.TYPE$ = "COMPILED
  433.       BULLETINS.OPTIONAL$ = FNYESNO$(BULLETINS.OPTIONAL)
  434.       GOSUB 15780
  435.       MESSAGE.REMINDER$ = FNYESNO$(MESSAGE.REMINDER)
  436.       REQUIRE.NON.ASCII$ = FNYESNO$(REQUIRE.NON.ASCII)
  437.       WELCOME.INTERRUPTABLE$ = FNYESNO$(WELCOME.INTERRUPTABLE)
  438.       REMIND.FILE.TRANSFERS$ = FNYESNO$(REMIND.FILE.TRANSFERS)
  439.       REMIND.PROFILE$ = FNYESNO$(REMIND.PROFILE)
  440.       DOORS.AVAILABLE$ = FNYESNO$(DOORS.AVAILABLE)
  441.       IF SYSOP.PASSWORD.1$ = "" THEN _
  442.          MN1$ = "(Disabled)" ELSE _
  443.          MN1$ = SYSOP.PASSWORD.1$
  444.       IF SYSOP.PASSWORD.2$ = "" THEN _
  445.          MN2$ = "(Disabled)" ELSE _
  446.          MN2$ = SYSOP.PASSWORD.2$
  447.       M11$ = "NO"
  448.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  449.          M11$ = "YES
  450.       LIMIT.DAILY.TIME$ = FNYESNO$(LIMIT.DAILY.TIME)
  451.       COMMANDS.BETWEEN.RINGS$ = FNYESNO$(COMMANDS.BETWEEN.RINGS)
  452.       MNP.SUPPORT$ = FNYESNO$(MNP.SUPPORT)
  453.       WILL.SUBDIRS.B.USED$ = FNYESNO$(WILL.SUBDIRS.B.USED)
  454.       UPLOAD.TO.SUBDIR$ = FNYESNO$(UPLOAD.TO.SUBDIR)
  455.       DOWNLOAD.TO.SUBDIR$ = FNYESNO$(DOWNLOAD.TO.SUBDIR)
  456.       RESTRICT.BAUD$ = FNYESNO$(RESTRICT.BAUD)
  457.       IF RESTRICT.BAUD=-2 THEN _
  458.          RESTRICT.BAUD$="YES=Registered users"
  459.       USE.COLOR$ = FNYESNO$(USE.COLOR)
  460.       DISKFULL.GO.OFFLINE$ = FNYESNO$(DISKFULL.GO.OFFLINE)
  461.       EXTENDED.LOGGING$ = FNYESNO$(EXTENDED.LOGGING)
  462.       DUMB.MODEM$ = FNYESNO$(DUMB.MODEM)
  463.       COMMENTS.AS.MESSAGES$ = FNYESNO$(COMMENTS.AS.MESSAGES)
  464.       TURBO.RBBS$ = FNYESNO$(TURBO.RBBS)
  465.       LIMIT.SEARCH.TO.FMS$ = FNYESNO$(LIMIT.SEARCH.TO.FMS)
  466.       NEW.FILES.CHECK$ = FNYESNO$(NEW.FILES.CHECK)
  467.       SHOW.SECTION$ = FNYESNO$(SHOW.SECTION)
  468.       COMMANDS.IN.PROMPT$ = FNYESNO$(COMMANDS.IN.PROMPT)
  469.       NEWUSER.SETS.DEFAULTS$ = FNYESNO$(NEWUSER.SETS.DEFAULTS)
  470.       REMEMBER.NEW.USERS$ = FNYESNO$(REMEMBER.NEW.USERS)
  471.       SURVIVE.NOUSER.ROOM$ = FNYESNO$(SURVIVE.NOUSER.ROOM)
  472.       TURN.PRINTER.OFF$ = FNYESNO$(TURN.PRINTER.OFF)
  473.       MUSIC$ = FNYESNO$(MUSIC)
  474.       RESTRICT.BY.DATE$ = FNYESNO$(RESTRICT.BY.DATE)
  475.       IF START.HASH < 1 THEN START.HASH = 1
  476.       IF LEN.HASH < 2 THEN LEN.HASH = 31
  477.       REDIRECT.IO.METHOD$ = FNYESNO$(REDIRECT.IO.METHOD)
  478.       GO.TO.SHELL$ = "SHELL"
  479.       IF NOT GO.TO.SHELL THEN _
  480.          GO.TO.SHELL$ = "EXIT RBBS-PC"
  481.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  482.          REQUIRED.QUESTIONNAIRE$ = "NONE"
  483.       MLCOM$ = FNYESNO$(MLCOM)
  484.       SHOOT.YOURSELF$ = FNYESNO$(SHOOT.YOURSELF)
  485.       GOSUB 18002
  486.       GOSUB 18102
  487.       I = 1
  488.       GOSUB 13030
  489. '
  490. ' *****************************************************************************
  491. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.                   *
  492. ' *****************************************************************************
  493. '
  494.       Y$ = "
  495. 12151 F = 0
  496.       MAINMSG$ = MAIN.MESSAGE.FILE$
  497.       MAINUSR$ = MAIN.USER.FILE$
  498. 12160 KEY OFF
  499.       GOSUB 22340
  500.       CALLS.TODATE! = 0                                 ' set initial message number to 0
  501.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  502.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  503.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  504.       FIRST.MESSAGE.RECORD = 2+ MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  505.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  506.       HIGHEST.MESSAGE.RECORD = 5*MAX.ALLOWED.MSGS.FRM.DEF _
  507.                                + 1 + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  508.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF ' MESSAGES file -- maximum number of messages
  509.       FILE$ = MAIN.MESSAGE.FILE$
  510.       MESSAGE.FILE.FOUND = 0
  511.       USER.FILE.FOUND = 0
  512.       GOSUB 30000
  513. '
  514. ' If MESSAGES exist, get checkpoint record
  515. '
  516.       IF OKAY THEN _
  517.          MESSAGE.FILE.FOUND = OKAY : _
  518.          GOSUB 30040 : _
  519.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  520.          MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD : _
  521.          MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD-FIRST.MESSAGE.RECORD)/5) + 1
  522.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  523.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  524.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  525.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  526.          GOSUB 30450                  ' Assure number of msgs.>0
  527.       FILE$ = MAIN.USER.FILE$         ' Check for USERS file
  528.       GOSUB 30000
  529. '
  530. ' If USERS file exist, set values
  531. '
  532.       IF OKAY THEN _
  533.          USER.FILE.FOUND = OKAY : _
  534.          FILE$ = MAIN.USER.FILE$ : _
  535.          GOSUB 30180 : _
  536.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  537.       IF MESSAGE.FILE.FOUND <> -1 AND F <> 2 THEN _
  538.          CURRENT.USER.COUNT = UG + 1   ' if no MESSAGES file, assume USERS full
  539.       IF MESSAGE.FILE.FOUND = -1 THEN _
  540.          GOSUB 30450                   ' if MESSAGES file, re-write checkpoint
  541.       IF MESSAGE.FILE.FOUND <> -1 THEN _
  542.          GOSUB 30230                   ' write new MESSAGES file if none
  543.       IF USER.FILE.FOUND <> -1 AND MESSAGE.FILE.FOUND = -1 THEN _
  544.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  545.          GOSUB 50000                   ' write new USERS file if none
  546.       IF USER.FILE.FOUND <> -1 AND MESSAGE.FILE.FOUND <> -1 THEN _
  547.          GOSUB 50000                   ' write new USERS file if none
  548.       FOR I = 1 TO 10
  549.         KEY I,""
  550.       NEXT
  551.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  552.       GOSUB 22140
  553. '
  554. ' *****************************************************************************
  555. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU                                   *
  556. ' *****************************************************************************
  557. '
  558. 12190 IX = 0
  559. 12320 CALL DISPLAY
  560.       IF IX = 21 THEN _
  561.          GOTO 22350
  562.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (Part 1)
  563.                     12624, _  ' 2        F2 - Global Parameters (Part 2)
  564.                     12626, _  ' 3        F3 - Global Parameters (Part 3)
  565.                     12628, _  ' 3        F4 - Static RBBS-PC Files
  566.                     12630, _  ' 4        F5 - Dynamic RBBS-PC Files
  567.                     12632, _  ' 5        F6 - RBBS-PC "doors"
  568.                     12634, _  ' 6        F7 - RBBS-PC security parameters
  569.                     12636, _  ' 7        F8 - Multiple RBBS-PC parameters
  570.                     12638, _  ' 8        F9 - RBBS-PC's utilities
  571.                     12640, _  ' 9       F10 - RBBS-PC File Manager
  572.                     12642, _  '10  Shift-F1 - RBBS-PC communications parameters
  573.                     12643, _  '11  Shift-F2 - RBBS-PC Net Mail
  574.                     12644     '12  Shift-F3 - New user's parameters
  575. '
  576. ' *****************************************************************************
  577. ' *  HANDLE UNSUPPORTED REQUEST                                               *
  578. ' *****************************************************************************
  579. '
  580. 12325 IX = IPAGE
  581.       GOTO 12320
  582. 12330 IX = -1
  583.       GOTO 12320
  584. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  585.                        12910, _  '   2 SYSOP's last name
  586.                        12980, _  '   3 SYSOP's remote pseudonym 1
  587.                        13060, _  '   4 SYSOP's remote pseudonym 2
  588.                        12670, _  '   5 SYSOP's password for local signon
  589.                        13140, _  '   6 SYSOP's default signon mode
  590.                        13210, _  '   7 SYSOP's office hours
  591.                        13224, _  '   8 Page SYSOP with printer's bell
  592.                        13238, _  '   9 300 BAUD callers (yes or no)
  593.                        13245, _  '  10 Using ANSI.SYS
  594.                        13249, _  '  11 Go off-line when disk is full
  595.                        13750, _  '  12 Prompt bell
  596.                        13840, _  '  13 Maximum time per session
  597.                        16650, _  '  14 Limit users to a max time per day
  598.                        13940, _  '  15 Months of inactivity before deleted
  599.                        13131, _  '  16 Name of this RBBS-PC
  600.                        15530, _  '  17 Foreground color
  601.                        15590, _  '  18 Background color
  602.                        15650, _  '  19 Border color
  603.                        13000     '  20 Who can bypass message subsystem
  604.       GOTO 12325
  605. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  606.                        16690, _  '  22 Remind users of uploads and downloads
  607.                        16722, _  '  23 Remind users of their profile
  608.                        16730, _  '  24 Specify default page length
  609.                        16790, _  '  25 Set maximum number of lines/message
  610.                        15880, _  '  26 Require non-ASCII protocol?
  611.                        15234, _  '  27 Factor to extend time for uploads
  612.                        17700, _  '  28 Required questionnaire name
  613.                        16000, _  '  29 Is system "welcome" interruptable?
  614.                        15840, _  '  30 Are the system bulletins optional?
  615.                        16040, _  '  31 Type of PC running RBBS-PC
  616.                        17230, _  '  32 Symbols for SYSOP's commands
  617.                        17240, _  '  33 Symbols for main menu's commands
  618.                        17250, _  '  34 Symbols for file menu's commands
  619.                        17260, _  '  35 Symbols for utilities menu's commands
  620.                        17264, _  '  36 Symbols for "global" commands
  621.                        17500, _  '  37 Show section at command prompt?
  622.                        17550, _  '  38 Show commands at command prompt?
  623.                        15820, _  '  39 Use machine language subroutines?
  624.                        15830     '  40 Restrict valid cmnds to current section
  625.       GOTO 12325
  626. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  627.                        18100, _  '  42 Field used distinguish users with same id
  628.                        17630, _  '  43 Restrict users by date
  629.                        18510, _  '  44 Days before expiration to warn
  630.                        18530, _  '  45 Security level when subscription expires
  631.                        18520, _  '  46 Days a newuser gets when registers
  632.                        17610, _  '  47 Turn printer off on recycle
  633.                        17620, _  '  48 Play music for RBBS themes?
  634.                        21760, _  '  49 Buffer size for text files
  635.                        22550, _  '  50 Notify users when SYSOP wants system?
  636.                        22550, _  '  51 Call back verification of all/new users
  637.                        12325, _  '  52
  638.                        12325, _  '  53
  639.                        12325, _  '  54
  640.                        12325, _  '  55
  641.                        12325, _  '  56
  642.                        12325, _  '  57
  643.                        12325, _  '  58
  644.                        12325, _  '  59
  645.                        12325     '  60
  646.       GOTO 12325
  647. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  648.                        15290, _  '  62 Number of active bulletins
  649.                        14800, _  '  63 Prefix used to name bulletin files
  650.                        14810, _  '  64 Drive and path for 'help' files
  651.                        14820, _  '  65 Prefix of nine major help files
  652.                        14825, _  '  66 Extension for individual help files
  653.                        14915, _  '  67 Help file for categorizing uploads
  654.                        14830, _  '  68 Name of 'newuser' file
  655.                        14840, _  '  69 Name of 'welcome" file
  656.                        14860, _  '  70 Name of SYSOP's commands menu
  657.                        14870, _  '  71 Name of main message command menu
  658.                        14880, _  '  72 Name of file subsystem command menu
  659.                        14890, _  '  73 Name of utilities command menu
  660.                        14900, _  '  74 Menu listing available conferences
  661.                        14905, _  '  75 Menu of questionnaires
  662.                        14910, _  '  76 File of unacceptable user names
  663.                        12325, _  '  77
  664.                        12325, _  '  78
  665.                        12325, _  '  79
  666.                        12325     '  80
  667.       GOTO 12325
  668. 12630 ON ILOOKUP GOSUB 15460, _  '  81 Name of 'message' file
  669.                        15500, _  '  82 Name of 'user' file
  670.                        15462, _  '  83 Name of 'comments' file
  671.                        15993, _  '  84 Record comments as private messages?
  672.                        15461, _  '  85 Name of 'callers' file
  673.                        15991, _  '  86 Extened logging to 'callers' file?
  674.                        22550, _  '  87 Wrap-around the 'callers' file?
  675.                        12325, _  '  88
  676.                        12325, _  '  89
  677.                        12325, _  '  90
  678.                        12325, _  '  91
  679.                        12325, _  '  92
  680.                        12325, _  '  93
  681.                        12325, _  '  94
  682.                        12325, _  '  95
  683.                        12325, _  '  96
  684.                        12325, _  '  97
  685.                        12325, _  '  98
  686.                        12325, _  '  99
  687.                        12325     ' 100
  688.       GOTO 12325
  689. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  690.                        16130, _  ' 102 Name of menu listing available doors
  691.                        16140, _  ' 103 Name of file built dynamical for doors
  692.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  693.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  694.                        16170, _  ' 106 Enable CTTY command for doors
  695.                        16180, _  ' 107 Invoke "drivers" via shell or DOS exit
  696.                        12325, _  ' 108
  697.                        12325, _  ' 109
  698.                        12325, _  ' 110
  699.                        12325, _  ' 111
  700.                        12325, _  ' 112
  701.                        12325, _  ' 113
  702.                        12325, _  ' 114
  703.                        12325, _  ' 115
  704.                        12325, _  ' 116
  705.                        12325, _  ' 117
  706.                        12325, _  ' 118
  707.                        12325, _  ' 119
  708.                        12325     ' 120
  709.       GOTO 12325
  710. 12634 ON ILOOKUP GOSUB 17160, _  ' 121 Minimum security level to logon
  711.                        17170, _  ' 122 Default security level for new users
  712.                        17180, _  ' 123 SYSOP's security level
  713.                        17190, _  ' 124 File listing download-secured files
  714.                        17200, _  ' 125 Minimum security to see SYSOP's menu
  715.                        17210, _  ' 126 Minimum security level to use 'doors'
  716.                        17220, _  ' 127 Max # security violations allowed
  717.                        17230, _  ' 128 Security levels for SYSOP commands
  718.                        17240, _  ' 129 Security levels for main commands
  719.                        17250, _  ' 130 Security levels for file commands
  720.                        17260, _  ' 131 Security levels for utilities commands
  721.                        17264, _  ' 132 Security level for 'global' commands'
  722.                        17270, _  ' 133 File name with privileged passwords
  723.                        17290, _  ' 134 Max # password changes allowed
  724.                        17300, _  ' 135 Min. security for temp. passwords
  725.                        17310, _  ' 136 Min. security to overwrite on uploads
  726.                        17316, _  ' 137 User's security exempted from packing
  727.                        22550, _  ' 138 Security assigned new public messages
  728.                        22550, _  ' 139 Security assigned new private messages
  729.                        22550     ' 140 Security to revise message's security
  730.       GOTO 12325
  731. 12636 ON ILOOKUP GOSUB 21750, _  ' 141 Maximum number of concurrent RBBS-PC's
  732.                        21810, _  ' 142 Environment running RBBS-PC
  733.                        21950, _  ' 143 Method that RBBS-PC re-cycles with
  734.                        21910, _  ' 144 Number of records in 'user' file
  735.                        22040, _  ' 145 Number of records in 'message' file
  736.                        13890, _  ' 146 Maximum number of messages allowed
  737.                        25040, _  ' 147 Conference file maintenance
  738.                        12325, _  ' 148
  739.                        12325, _  ' 149
  740.                        12325, _  ' 150
  741.                        12325, _  ' 151
  742.                        12325, _  ' 152
  743.                        12325, _  ' 153
  744.                        12325, _  ' 154
  745.                        12325, _  ' 155
  746.                        12325, _  ' 156
  747.                        12325, _  ' 157
  748.                        12325, _  ' 158
  749.                        12325, _  ' 159
  750.                        12325     ' 160
  751.       IF REFRESH = 1 THEN _
  752.          REFRESH = 0 : _
  753.          GOTO 12151
  754.       IF REFRESH = 2 THEN _
  755.          REFRESH = 0 : _
  756.          GOTO 12160
  757.       GOTO 12325
  758. 12638 ON ILOOKUP GOSUB 23160, _  ' 161 Pack the 'messages' file
  759.                        22570, _  ' 162 Rebuild the 'user' file
  760.                        23630, _  ' 163 Print the message headers
  761.                        23740, _  ' 164 Renumber messages
  762.                        23620, _  ' 165 Repair the 'message' file
  763.                        24050, _  ' 166 Require users to answer questionnaire
  764.                        24790, _  ' 167 Check FMS directory
  765.                        12325, _  ' 168
  766.                        12325, _  ' 169
  767.                        12325, _  ' 170
  768.                        12325, _  ' 171
  769.                        12325, _  ' 172
  770.                        12325, _  ' 173
  771.                        12325, _  ' 174
  772.                        12325, _  ' 175
  773.                        12325, _  ' 176
  774.                        12325, _  ' 177
  775.                        12325, _  ' 178
  776.                        12325, _  ' 179
  777.                        12325     ' 180
  778.       GOTO 12325
  779. 12640 ON ILOOKUP GOSUB 14920, _  ' 181 Drive available for uploading
  780.                        12730, _  ' 182 Name of directory for uploading
  781.                        18550, _  ' 183 Drive/path for upload dir
  782.                        13470, _  ' 184 Drive(s) available for downloading
  783.                        25380, _  ' 185 Are DOS subdirectories used?
  784.                        25420, _  ' 186 Upload to a DOS subdirectory?
  785.                        25460, _  ' 187 Are downloads from DOS subdirectories?
  786.                        25495, _  ' 188 List, change, add, delete subdir.?
  787.                        14850, _  ' 189 Upload directory's file name extension
  788.                        15920, _  ' 190 Omit directory list from N>ew command?
  789.                        18350, _  ' 191 CC all upload descriptions to
  790.                        12740, _  ' 192 FMS directory name
  791.                        18515, _  ' 193 Security level to categorize uploads
  792.                        17590, _  ' 194 Limit file searches to upload dir
  793.                        18200, _  ' 195 Default category codes for uploads
  794.                        18300, _  ' 196 File name with valid category codes
  795.                        17600, _  ' 197 Enable download of new files at logon
  796.                        18400, _  ' 198 Length of description of uploads
  797.                        18500, _  ' 199 Min security level to view new uploads
  798.                        18600     ' 200 Drive/path directory files
  799.       GOTO 12325
  800. 12642 ON ILOOKUP GOSUB 14120, _  ' 201 Communications Port being used
  801.                        15240, _  ' 202 Seconds for modem to initalize
  802.                        15250, _  ' 203 Seconds to wait before issuing cmds.
  803.                        13228, _  ' 204 Number of rings to answer on
  804.                        15710, _  ' 205 Use standard RBBS-PC modem commands
  805.                        15911, _  ' 206 Microcom's MNP available?
  806.                        16121, _  ' 207 Issue modem commands between rings?
  807.                        16124, _  ' 208 Baud rate to initially open modem at
  808.                        16031, _  ' 209 Seconds to wait before disconnecting
  809.                        16725, _  ' 210 Is a dumb modem being used?
  810.                        23731, _  ' 211 Initialize Hayes 2400 firmware
  811.                        18540, _  ' 212 DTR drop delay time
  812.                        18620, _  ' 213 Where external protocol pgms are
  813.                        17640, _  ' 214 Use xmodem in external protocol pgms
  814.                        17650, _  ' 215 Always check for autodownload support
  815.                        18360, _  ' 216 Restrict dir search for 'ALL' to
  816.                        12325, _  ' 217 Modem TDD for BAUDOT code?
  817.                        12325, _  ' 218
  818.                        12325, _  ' 219
  819.                        12325     ' 220
  820.       GOTO 12325
  821. 12643 ON ILOOKUP GOSUB 26040, _  ' 221 Time of day to drop to DOS
  822.                        12325, _  ' 222 NET-MAIL driver to invoke
  823.                        12325, _  ' 223
  824.                        12325, _  ' 224
  825.                        12325, _  ' 225
  826.                        12325, _  ' 226
  827.                        12325, _  ' 227
  828.                        12325, _  ' 228
  829.                        12325, _  ' 229
  830.                        12325, _  ' 230
  831.                        12325, _  ' 231
  832.                        12325, _  ' 232
  833.                        12325, _  ' 233
  834.                        12325, _  ' 234
  835.                        12325, _  ' 235
  836.                        12325, _  ' 236
  837.                        12325, _  ' 237
  838.                        12325, _  ' 238
  839.                        12325, _  ' 239
  840.                        12325     ' 240
  841.       GOTO 12325
  842. 12644 ON ILOOKUP GOSUB 17560, _  ' 241 Prompt new users for their preferences
  843.                        22550, _  ' 242 New users default sign-on mode
  844.                        22550, _  ' 243 New users default file-transfer mode
  845.                        22550, _  ' 244 Line feeds for new users default to
  846.                        22550, _  ' 245 Nulls for new users default to
  847.                        22550, _  ' 246 Prompt bell for new users defaults to
  848.                        22550, _  ' 247 New users 'graphics' ability is
  849.                        22550, _  ' 248 New users upper/lower case
  850.                        22550, _  ' 249 New users margins defaults are
  851.                        17570, _  ' 250 Remember new users
  852.                        17580, _  ' 251 Survive no user room
  853.                        12325, _  ' 252
  854.                        12325, _  ' 253
  855.                        12325, _  ' 254
  856.                        12325, _  ' 255
  857.                        12325, _  ' 256
  858.                        12325, _  ' 257
  859.                        12325, _  ' 258
  860.                        12325, _  ' 259
  861.                        12325     ' 260
  862.       GOTO 12325
  863. '
  864. ' *****************************************************************************
  865. ' * PROCESS THE PASSWORD SELECTED FOR THE LOCAL SYSOP TO TAKE OVER RBBS-PC    *
  866. ' *****************************************************************************
  867. '
  868. 12670 GOSUB 31060
  869.       XX$ = "Enter password (8 characters or less)"
  870.       GOSUB 50345
  871.       GOSUB 14990
  872.       IF LEN(HJ$)>8 OR INSTR(HJ$,"0!") THEN _
  873.          HJ$ = "5" : _
  874.          GOTO 12670
  875.       LOCAL.PASSWORD$ = HJ$
  876.       RETURN
  877. '
  878. ' *****************************************************************************
  879. ' * PROCESS NAME OF UPLOAD DIRECTORY                                          *
  880. ' *****************************************************************************
  881. '
  882. 12730 A$ = "upload"
  883.       GOSUB 13590
  884.       UPLOAD.DIRECTORY$ = HJ$
  885.       RETURN
  886. '
  887. ' *****************************************************************************
  888. ' * Get the File Management System Directory                                  *
  889. ' *****************************************************************************
  890. '
  891. 12740 A$ = "File Management System (or NONE)"
  892.       GOSUB 13590
  893.       FMS.DIRECTORY$ = HJ$
  894.       IF FMS.DIRECTORY$ = "NONE" THEN _
  895.          FMS.DIRECTORY$ = ""
  896.       RETURN
  897. '
  898. ' *****************************************************************************
  899. ' * GET THE SYSOP'S FIRST NAME                                                *
  900. ' *****************************************************************************
  901. '
  902. 12840 XX$ = "What is the SYSOP's FIRST name? "
  903.       GOSUB 50345
  904.       LINE INPUT;HJ$
  905.       IF HJ$ = "" THEN _
  906.          GOTO 12840
  907.       IF LEN(HJ$) < 3 THEN _
  908.          GOTO 12840
  909.       GOSUB 50654
  910.       SYSOP.FIRST.NAME$ = HJ$
  911.       RETURN
  912. '
  913. ' *****************************************************************************
  914. ' * PROCESS THE SYSOP'S LAST NAME                                             *
  915. ' *****************************************************************************
  916. '
  917. 12910 XX$ = "What is the SYSOP's LAST name? "
  918.       GOSUB 50345
  919.       LINE INPUT;HJ$
  920.       IF HJ$ = "" THEN _
  921.          GOTO 12910
  922.       IF LEN(HJ$) < 3 THEN _
  923.          GOTO 12910
  924.       GOSUB 50654
  925.       SYSOP.LAST.NAME$ = HJ$
  926.       RETURN
  927. '
  928. ' *****************************************************************************
  929. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY  *
  930. ' *****************************************************************************
  931. '
  932. 12980 XX$ = "What is the SYSOP's Password #1? "
  933.       GOSUB 50345
  934.       LINE INPUT;HJ$
  935.       GOSUB 50654
  936.       SYSOP.PASSWORD.1$ = HJ$
  937.       IF SYSOP.PASSWORD.1$ = "" THEN _
  938.          MN1$ = "(Disabled)" ELSE _
  939.          MN1$ = SYSOP.PASSWORD.1$
  940.       RETURN
  941. '
  942. ' *****************************************************************************
  943. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM          *
  944. ' *****************************************************************************
  945. '
  946. 13000 CLS
  947.       I = 0
  948.       LOCATE 5,5
  949.       PRINT "Please identify the type of user that can bypass the message subsystem:"
  950.       LOCATE 7,10
  951.       PRINT "0.   Any user"
  952.       LOCATE 9,10
  953.       PRINT "1.   Any user except new (or first-time) users"
  954.       LOCATE 11,10
  955.       PRINT "2.   Only EXPERT users"
  956.       LOCATE 13,10
  957.       PRINT "3.   Users with a specific security level."
  958. 13010 GOSUB 50340
  959.       XX$ = "Select environment (0 to 3, CR to end) "
  960.       GOSUB 50345
  961.       LINE INPUT;X$
  962.       IF X$ = "" THEN _
  963.          RETURN
  964.       BYPASS = VAL(X$)
  965. 13020 IF BYPASS < 0 OR BYPASS > 3 THEN _
  966.          GOTO 13010
  967.       BYPASS$ = NOT.YET.IN$
  968.       RETURN
  969. 13030 IF BYPASS = 0 THEN _
  970.          BYPASS$ = "Any user" : _
  971.          RETURN
  972.       IF BYPASS = 1 THEN _
  973.          BYPASS$ = "All but new users" : _
  974.          RETURN
  975.       IF BYPASS = 2 THEN _
  976.          BYPASS$ = "Only EXPERT users" : _
  977.          RETURN
  978.       IF I = 0 THEN _
  979.          XX$ = "Specify the security level required to bypass messages. " : _
  980.          GOSUB 50345 : _
  981.          LINE INPUT;X$
  982.       BYPASS$ = "Security >"+STR$(VAL(X$))+" users"
  983.       RETURN
  984. '
  985. ' *****************************************************************************
  986. ' * PROCESS THE "PSEUDONYM" (LAST NAME) USED BY THE SYSOP TO LOGON REMOTELY   *
  987. ' *****************************************************************************
  988. '
  989. 13060 XX$ = "What is the SYSOP's Password #2? "
  990.       GOSUB 50345
  991.       LINE INPUT;HJ$
  992.       GOSUB 50654
  993.       SYSOP.PASSWORD.2$ = HJ$
  994.       IF SYSOP.PASSWORD.2$ = "" THEN _
  995.          MN2$ = "(Disabled)" ELSE _
  996.          MN2$ = SYSOP.PASSWORD.2$
  997.       RETURN
  998. '
  999. ' *****************************************************************************
  1000. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME                      *
  1001. ' *****************************************************************************
  1002. '
  1003. 13131 XX$ = "Enter name for this RBBS-PC (19 characters or less) "
  1004.       GOSUB 50345
  1005.       LINE INPUT;HJ$
  1006.       IF LEN(HJ$) > 19 THEN _
  1007.          GOTO 13131
  1008.       GOSUB 50654
  1009.       RBBS.NAME$ = HJ$
  1010.       RETURN
  1011. '
  1012. ' *****************************************************************************
  1013. ' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE        *
  1014. ' *****************************************************************************
  1015. '
  1016. 13140 XX$ = "SYSOP's default sign-on mode (EXPERT/NOVICE)? "
  1017.       GOSUB 50345
  1018.       LINE INPUT;HJ$
  1019.       IF LEN(HJ$) = 6 OR LEN(HJ$) = 1 THEN _
  1020.          GOTO 13170
  1021.       GOTO 13140
  1022. 13170 GOSUB 50654
  1023.       IF HJ$ = "E" OR HJ$ = "EXPERT" THEN _
  1024.          EXPERT.USER$ = "EXPERT" : _
  1025.          RETURN
  1026.       IF HJ$ = "N" OR HJ$ = "NOVICE" THEN _
  1027.          EXPERT.USER$ = "NOVICE" : _
  1028.          RETURN
  1029.       GOTO 13140
  1030. '
  1031. ' *****************************************************************************
  1032. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"                              *
  1033. ' *****************************************************************************
  1034. '
  1035. 13210 XX$ = "What is the earliest SYSOP wants to be paged? -- HHMM "
  1036.       GOSUB 50345
  1037.       LINE INPUT;HJ$
  1038.       IF LEN(HJ$) <> 4 THEN _
  1039.          GOTO 13210
  1040.       IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
  1041.          FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
  1042.          FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
  1043.          FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
  1044.          GOTO 13210
  1045.       START.OFFICE.HOURS = VAL(HJ$)
  1046.       IF START.OFFICE.HOURS < 0 OR START.OFFICE.HOURS > 2400 THEN _
  1047.          GOTO 13210
  1048. 13216 XX$ = "What is the latest SYSOP wants to be paged? ---- HHMM "
  1049.       GOSUB 50345
  1050.       LINE INPUT;HJ$
  1051.       IF LEN(HJ$) <> 4 THEN _
  1052.          GOTO 13216
  1053.       IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
  1054.          FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
  1055.          FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
  1056.          FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
  1057.          GOTO 13216
  1058.       END.OFFICE.HOURS = VAL(HJ$)
  1059.       IF END.OFFICE.HOURS < 0 OR END.OFFICE.HOURS > 2400 THEN _
  1060.          GOTO 13216
  1061.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1062.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1063.       RETURN
  1064. '
  1065. ' *****************************************************************************
  1066. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING               *
  1067. ' *****************************************************************************
  1068. '
  1069. 13224 XX$ = "Use on-line printer's bell to the page SYSOP? (YES or NO) "
  1070.       GOSUB 50345
  1071.       GOSUB 22380
  1072.       ON AB GOTO 13226,13226,13224,13224
  1073. 13226 M11$ = HJ$
  1074.       RETURN
  1075. '
  1076. ' *****************************************************************************
  1077. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING         *
  1078. ' *****************************************************************************
  1079. '
  1080. 13228 A$ = ""
  1081.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "1Q0X1"
  1082. 13229 XX$ = "How many rings should RBBS-PC wait before answering? " + A$
  1083.       GOSUB 50345
  1084.       LINE INPUT;HJ$
  1085.       REQUIRED.RINGS = FIX(VAL(HJ$))
  1086.       IF REQUIRED.RINGS < 0 OR REQUIRED.RINGS > 255 THEN _
  1087.          GOTO 13228
  1088.       IF REQUIRED.RINGS = 0 THEN _
  1089.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "1Q0X1" : _
  1090.          RETURN
  1091. 13233 XX$ = "Next call answered after" + STR$(REQUIRED.RINGS) + " rings. Do you want ringback? (YES/NO)"
  1092.       GOSUB 50345
  1093.       GOSUB 22380
  1094.       ON AB GOTO 13237,13235,13233,13233
  1095. 13235 IF REQUIRED.RINGS > 5 THEN _
  1096.          A$ = "(<6 for ringback)" : _
  1097.          GOTO 13229
  1098.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "255  "
  1099.       RETURN
  1100. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "254  "
  1101.       RETURN
  1102. '
  1103. ' *****************************************************************************
  1104. ' * ALLOW THE SYSOP TO ELECT TO HANDLE CALLS FROM 300 BAUD USERS              *
  1105. ' *****************************************************************************
  1106. '
  1107. 13238 XX$ = "Decline calls from users at 300 BAUD (YES OR NO) "
  1108.       GOSUB 50345
  1109.       GOSUB 22380
  1110.       ON AB GOTO 13243,13240,13238,13238
  1111. 13240 GOSUB 50340
  1112.       XX$ = "Deny use of 300 BAUD to registered users (YES OR NO) "
  1113.       GOSUB 50345
  1114.       GOSUB 22380
  1115.       ON AB GOTO 13242,13243,13240,13240
  1116. 13242 HJ$="YES=Registered users"
  1117. 13243 RESTRICT.BAUD$=HJ$
  1118.       RETURN
  1119. '
  1120. ' *****************************************************************************
  1121. ' * ALLOW THE SYSOP TO ELECT TO DISPLAY COLOR/GRAPHICS ON HIS LOCAL MONITOR   *
  1122. ' *****************************************************************************
  1123. '
  1124. 13245 XX$ = " Using ANSI.SYS for color/graphics on your color monitor (YES OR NO) "
  1125.       GOSUB 50345
  1126.       GOSUB 22380
  1127.       ON AB GOTO 13247,13247,13245,13245
  1128. 13247 USE.COLOR$=HJ$
  1129.       RETURN
  1130. '
  1131. ' *****************************************************************************
  1132. ' * ALLOW THE SYSOP TO ELECT TO GO OFF-LINE WHEN A DISK FULL CONDITIONS OCCURS*
  1133. ' *****************************************************************************
  1134. '
  1135. 13249 XX$ = "Should RBBS-PC go off-line when DISK FULL occurs (YES OR NO) "
  1136.       GOSUB 50345
  1137.       GOSUB 22380
  1138.       ON AB GOTO 13251,13251,13249,13249
  1139. 13251 DISKFULL.GO.OFFLINE$=HJ$
  1140.       RETURN
  1141. '
  1142. ' *****************************************************************************
  1143. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE     *
  1144. ' *****************************************************************************
  1145. '
  1146. 13253 XX$ = "Specify single drive in the range A->"+M$+" for "+A$
  1147.       GOSUB 50345
  1148.       LINE INPUT;HJ$
  1149.       IF LEN(HJ$) <> 1 THEN _
  1150.          GOTO 13253
  1151.       GOSUB 50654
  1152.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1153.          GOTO 13253
  1154.       RETURN
  1155. '
  1156. ' *****************************************************************************
  1157. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED                 *
  1158. ' *****************************************************************************
  1159. '
  1160. 13470 XX$ = "Specify download drives (max of" + STR$(MAXD) + " in the range A-> " + M$ + "). "
  1161.       GOSUB 50345
  1162.       LINE INPUT;HJ$
  1163.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1164.          GOTO 13470
  1165.       GOSUB 50654
  1166.       FOR I = 1 TO LEN(HJ$)
  1167.         A$(I) = MID$(HJ$,I,1)
  1168.       NEXT
  1169.       FOR I = 1 TO LEN(HJ$)
  1170.         IF A$(I) < "A" OR A$(I) > M$ THEN _
  1171.            GOTO 13470
  1172.       NEXT
  1173.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1174.       IF DNLD.SUB < 1 THEN _
  1175.          RETURN
  1176.       FOR I = 1 TO DNLD.SUB
  1177.         IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1178.            DNLD$(I) = ""
  1179.       NEXT
  1180.       STOPIT = DNLD.SUB
  1181.       FOR I = 1 TO STOPIT
  1182.         IF DNLD$(I) <> "" THEN _
  1183.            GOTO 13583
  1184.         DNLD$(I) = DNLD$(I + 1)
  1185.         DNLD$(I + 1) = ""
  1186. 13583 NEXT
  1187.       DNLD.SUB = 0
  1188.       FOR I = 1 TO STOPIT
  1189.         IF DNLD$(I) <> "" THEN _
  1190.            DNLD.SUB = DNLD.SUB + 1
  1191.       NEXT
  1192.       RETURN
  1193. '
  1194. ' *****************************************************************************
  1195. ' * DETERMINE THE NAME OF a DIRECTORY (A TEXT FILE)                           *
  1196. ' *****************************************************************************
  1197. '
  1198. 13590 A$ = "Name of " + A$ + " directory (8 char. max)."
  1199.       MAX = 8
  1200.       GOTO 13599
  1201. 13591 A$ = "Master directory name--used as ext. for others. (3 char. max)."
  1202. 13593 MAX = 3
  1203. 13599 XX$ = A$
  1204.       GOSUB 50345
  1205.       LINE INPUT;HJ$
  1206.       GOSUB 50654
  1207.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1208.          GOTO 13599
  1209.       I = 0
  1210.       GOSUB 25920
  1211.       IF I = 0 THEN _
  1212.          RETURN
  1213.       GOTO 13599
  1214. '
  1215. ' *****************************************************************************
  1216. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?             *
  1217. ' *****************************************************************************
  1218. '
  1219. 13750 XX$ = "Prompt bell default? (ON or OFF) "
  1220.       GOSUB 50345
  1221.       LINE INPUT;HJ$
  1222.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 3 THEN _
  1223.          GOTO 13750
  1224.       GOSUB 50654
  1225.       IF HJ$ = "ON"  THEN _
  1226.          GOTO 13820
  1227.       IF HJ$ = "OFF" THEN _
  1228.          GOTO 13820
  1229.       GOTO 13750
  1230. 13820 PROMPT.BELL$ = HJ$
  1231.       RETURN
  1232. '
  1233. ' *****************************************************************************
  1234. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)                 *
  1235. ' *****************************************************************************
  1236. '
  1237. 13840 XX$ = "Set maximum minutes a user can stay on the system "
  1238.       GOSUB 50345
  1239.       LINE INPUT;HJ$
  1240.       MINUTES.PER.SESSION! = VAL(HJ$)
  1241.       IF MINUTES.PER.SESSION! < 0 OR MINUTES.PER.SESSION! > 1440 THEN _
  1242.          GOTO 13840
  1243.       RETURN
  1244. '
  1245. ' ******************************************************************************
  1246. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED                *
  1247. ' ******************************************************************************
  1248. '
  1249. 13890 J = 999
  1250.       IF ((MAX.MSG.FILE.SIZE.FRM.DEF!-1-MAXIUM.NUMBER.OF.NODES)/5)<J THEN _
  1251.          J = (MAX.MSG.FILE.SIZE.FRM.DEF!-1-MAXIMUM.NUMBER.OF.NODES)/5
  1252.       GOSUB 50340
  1253.       XX$ = "Set maximum number of messages allowed (MAX = " + STR$(FIX(J)) + ")"
  1254.       GOSUB 50345
  1255.       LINE INPUT;HJ$
  1256.       MAX.ALLOWED.MSGS.FRM.DEF = VAL(HJ$)
  1257.       IF MAX.ALLOWED.MSGS.FRM.DEF < 1 AND _
  1258.          MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  1259.          GOTO 13890
  1260.       IF MAX.ALLOWED.MSGS.FRM.DEF > 0 AND _
  1261.          MAX.ALLOWED.MSGS.FRM.DEF < 1000 AND _
  1262.          MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1263.          GOTO 13929
  1264.       XX$ = "Increase the " + MAIN.MESSAGE.FILE$ + " file to " + STR$((MAX.ALLOWED.MSGS.FRM.DEF*5) + 1 + MAXIMUM.NUMBER.OF.NODES) + " records? (YES OR NO) "
  1265.       GOSUB 50345
  1266.       GOSUB 22380
  1267.       ON AB GOTO 13890,13927,13890,13890
  1268. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1269.       GOSUB 30450
  1270.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF*5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1271.       GOSUB 22080
  1272.       RETURN
  1273. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1274.       GOSUB 30450
  1275.       RETURN
  1276. '
  1277. ' *****************************************************************************
  1278. ' * IDENTIFY THE NUMBER OF MONTHS A USER CAN BE INACTIVE BEFORE HE IS PURGED  *
  1279. ' *****************************************************************************
  1280. '
  1281. 13940 XX$ = "Set number of months before an inactive user is purged. "
  1282.       GOSUB 50345
  1283.       LINE INPUT;HJ$
  1284.       ACT.MNTHS.B4.DELETING = VAL(HJ$)
  1285.       IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
  1286.          GOTO 13940
  1287.       RETURN
  1288. '
  1289. ' *****************************************************************************
  1290. ' * SPECIFY THE COMMUNICATIONS PORT TO BE USED (1 OR 2)                       *
  1291. ' *****************************************************************************
  1292. '
  1293. 14120 COMMIN = 1
  1294.       COMMAX = 2
  1295.       XX$ = "# of communication port to use (" + _
  1296.             MID$(STR$(COMMIN),2) + "-" + MID$(STR$(COMMAX),2) + _
  1297.             ", or 0 for LOCAL WORKSTATION)? "
  1298.       GOSUB 50345
  1299.       LINE INPUT;HJ$
  1300.       IF LEN(HJ$) <> 1 THEN _
  1301.          GOTO 14120
  1302.       X = FIX(VAL(MID$(HJ$,1,1)))
  1303.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1304.          GOTO 14120
  1305.       COM.PORT$ = "COM" + HJ$
  1306.       RETURN
  1307. '
  1308. ' *****************************************************************************
  1309. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES                     *
  1310. ' *****************************************************************************
  1311. '
  1312. 14790 GOSUB 15160
  1313.       DRIVE.FOR.BULLETINS$ = TB$
  1314.       GOSUB 14970
  1315.       BULLETIN.MENU$ = HJ$
  1316.       RETURN
  1317. '
  1318. ' *****************************************************************************
  1319. ' *  PREFIX USED TO NAME BULLETIN FILES                                       *
  1320. ' *****************************************************************************
  1321. '
  1322. 14800 GOSUB 14970
  1323.       IF LEN(HJ$) > 6 THEN _
  1324.          RETURN
  1325.       BULLETIN.PREFIX$ = HJ$
  1326.       RETURN
  1327. '
  1328. ' *****************************************************************************
  1329. ' *  DRIVE AND PATH FOR NINE MAJOR 'HELP' FILES                               *
  1330. ' *****************************************************************************
  1331. '
  1332. 14810 GOSUB 15200
  1333.       HELP.PATH$ = HJ$
  1334.       RETURN
  1335. '
  1336. ' *****************************************************************************
  1337. ' *  PREFIX FOR FOR NINE MAJOR 'HELP' FILES                                  *
  1338. ' *****************************************************************************
  1339. '
  1340. 14820 GOSUB 14970
  1341.       IF LEN(HJ$) > 7 THEN _
  1342.          RETURN
  1343.       HELP.FILE.PREFIX$ = HJ$
  1344.       RETURN
  1345. '
  1346. ' *****************************************************************************
  1347. ' *  NAME OF 'NEWUSER' FILE                                                   *
  1348. ' *****************************************************************************
  1349. '
  1350. 14825 A$ = "File extension for help files (max 3 chars)"
  1351.       GOSUB 13593
  1352.       HELP.EXTENSION$ = HJ$
  1353.       RETURN
  1354. 14830 GOSUB 17330
  1355.       NEWUSER.FILE$ = SJ$ + ":" + HJ$
  1356.       RETURN
  1357. '
  1358. ' *****************************************************************************
  1359. ' *  NAME OF 'WELCOME' FILE                                                   *
  1360. ' *****************************************************************************
  1361. '
  1362. 14840 GOSUB 17330
  1363.       WELCOME.FILE$ = SJ$ + ":" + HJ$
  1364.       RETURN
  1365. '
  1366. ' *****************************************************************************
  1367. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION                                *
  1368. ' *****************************************************************************
  1369. '
  1370. 14850 GOSUB 13591
  1371.       DIRECTORY.EXTENTION$ = HJ$
  1372.       RETURN
  1373. '
  1374. ' *****************************************************************************
  1375. ' *  NAME OF THE SYSOP'S MENU                                                 *
  1376. ' *****************************************************************************
  1377. '
  1378. 14860 GOSUB 17330
  1379.       MENU$(1) = SJ$ + ":" + HJ$
  1380.       RETURN
  1381. '
  1382. ' *****************************************************************************
  1383. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU                                  *
  1384. ' *****************************************************************************
  1385. '
  1386. 14870 GOSUB 17330
  1387.       MENU$(2) = SJ$ + ":" + HJ$
  1388.       RETURN
  1389. '
  1390. ' *****************************************************************************
  1391. ' *  NAME OF FILE SUBSECTION'S MENU                                           *
  1392. ' *****************************************************************************
  1393. '
  1394. 14880 GOSUB 17330
  1395.       MENU$(3) = SJ$ + ":" + HJ$
  1396.       RETURN
  1397. '
  1398. ' *****************************************************************************
  1399. ' *  NAME OF UTILITIES SUBSECTIN'S MENU                                       *
  1400. ' *****************************************************************************
  1401. '
  1402. 14890 GOSUB 17330
  1403.       MENU$(4) = SJ$ + ":" + HJ$
  1404.       RETURN
  1405. '
  1406. ' *****************************************************************************
  1407. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE                  *
  1408. ' *****************************************************************************
  1409. '
  1410. 14900 GOSUB 17330
  1411.       CONFERENCE.MENU$ = SJ$ + ":" + HJ$
  1412.       RETURN
  1413. '
  1414. ' *****************************************************************************
  1415. ' *  GET ANSWER MENU                                                          *
  1416. ' *****************************************************************************
  1417. '
  1418. 14905 GOSUB 17330
  1419.       ANS.MENU$ = SJ$+":"+HJ$
  1420.       RETURN
  1421. '
  1422. ' *****************************************************************************
  1423. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES                          *
  1424. ' *****************************************************************************
  1425. '
  1426. 14910 GOSUB 17330
  1427.       TRASHCAN.FILE$ = SJ$ + ":" + HJ$
  1428.       RETURN
  1429. '
  1430. ' *****************************************************************************
  1431. ' *  HELP FOR CATEGORIZING UPLOADS                                            *
  1432. ' *****************************************************************************
  1433. '
  1434. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1435.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1436.       CALL ALLCAPS (UPCAT.HELP$)
  1437.       RETURN
  1438. '
  1439. ' *****************************************************************************
  1440. ' *  DRIVE AVAILABLE FOR UPLOADING                                            *
  1441. ' *****************************************************************************
  1442. '
  1443.       ON AB GOTO 15940,15940,15920,15920
  1444. 14920 A$ = "uploading "
  1445.       GOSUB 13253
  1446.       DRIVE.FOR.UPLOADS$ = HJ$
  1447.       IF LEN(UPLOAD.SUBDIR$)>1 THEN _
  1448.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1449.       RETURN
  1450. '
  1451. ' *****************************************************************************
  1452. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG      *
  1453. ' *****************************************************************************
  1454. '
  1455. 14970 X$ = OPTION$
  1456. 14980 GOSUB 31060
  1457.       PRINT "Specify name of the file for option " + X$ + ". ";
  1458. 14990 LINE INPUT;HJ$
  1459.       GOSUB 50654
  1460.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1461.          GOTO 14980
  1462.       L1 = INSTR(HJ$,".")
  1463.       IF L1 = 0 THEN _
  1464.          IF LEN(HJ$) < 9 THEN _
  1465.             GOTO 15045 ELSE _
  1466.       GOTO 14980
  1467.       IF L1 > 9 THEN _
  1468.          GOTO 14980
  1469.       IF L1 < 2 THEN _
  1470.          GOTO 14980
  1471.       IF LEN(HJ$)-L1 > 3 THEN _
  1472.          GOTO 14980
  1473. 15045 I = 0
  1474.       GOSUB 25920
  1475.       IF I = 0 THEN _
  1476.          RETURN
  1477.       GOTO 14980
  1478. '
  1479. ' *****************************************************************************
  1480. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG  *
  1481. ' *****************************************************************************
  1482. '
  1483. 15160 X$ = OPTION$
  1484. 15170 XX$ = "Specify drive in the range A->" + M$ + " for option " + X$ + ". "
  1485.       GOSUB 50345
  1486.       LINE INPUT;HJ$
  1487.       IF LEN(HJ$) <> 1 THEN _
  1488.          GOTO 15170
  1489.       GOSUB 50654
  1490.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1491.          GOTO 15170
  1492.       TB$ = HJ$
  1493.       RETURN
  1494. '
  1495. ' *****************************************************************************
  1496. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH                            *
  1497. ' *****************************************************************************
  1498. '
  1499. 15200 X$ = OPTION$
  1500. 15205 CALL ASKRO ("Specify drive (A->"+M$+") and path for option "+X$+".",24,HJ$)
  1501.       IF LEN(HJ$) < 1 THEN 15205
  1502.       GOSUB 50654
  1503.       IF LEN(HJ$) = 1 THEN HJ$ = HJ$ + ":"
  1504.       IF MID$(HJ$,2,1)=":" THEN _
  1505.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN 15205
  1506.       IF INSTR(HJ$,"\")>0 THEN _
  1507.         IF RIGHT$(HJ$,1) <> "\" THEN HJ$ = HJ$ + "\"
  1508.       TB$ = HJ$
  1509.       RETURN
  1510. 15230 RETURN
  1511. '
  1512. ' *****************************************************************************
  1513. ' * ALLOW A SYSOP TO EXTEND A USER'S TIME FOR UPLOADS                         *
  1514. ' *****************************************************************************
  1515. '
  1516. 15234 XX$ = "Extend by what fraction of time uploading "
  1517.       GOSUB 50345
  1518.       LINE INPUT;HJ$
  1519.       IF VAL(HJ$) < 0 OR VAL(HJ$) > 10 THEN _
  1520.          GOTO 15234
  1521.       UPLOAD.TIME.FACTOR! = VAL(HJ$)
  1522.       RETURN
  1523. '
  1524. ' *****************************************************************************
  1525. ' * REQUEST NUMBER OF SECONDS TO WAIT AFTER INITIALIZING THE MODEM            *
  1526. ' *****************************************************************************
  1527. '
  1528. 15240 XX$ = "How many seconds of delay after modem initilization (1 to 99)?"
  1529.       GOSUB 50345
  1530.       LINE INPUT;HJ$
  1531.       B1 = VAL(HJ$)
  1532.       IF B1 < 1 OR B1 > 99 THEN _
  1533.          GOTO 15240
  1534.       MODEM.INIT.WAIT.TIME = B1
  1535.       RETURN
  1536. '
  1537. ' *****************************************************************************
  1538. ' * REQUEST NUMBER OF SECONDS TO DELAY PRIOR TO ISSUING MODEM COMMANDS        *
  1539. ' *****************************************************************************
  1540. '
  1541. 15250 XX$ = "# seconds to delay prior to issuing modem commands (0 to 99)?"
  1542.       GOSUB 50345
  1543.       LINE INPUT;HJ$
  1544.       B1 = VAL(HJ$)
  1545.       IF B1 < 0 OR B1 > 99 THEN _
  1546.          GOTO 15250
  1547.       MODEM.COMMAND.DELAY.TIME = B1
  1548.       RETURN
  1549. '
  1550. ' *****************************************************************************
  1551. ' * ALLOW THE SYSOP TO SPECIFY THE NUMBER OF ACTIVE BULLETINS                 *
  1552. ' *****************************************************************************
  1553. '
  1554. 15290 XX$ = "Enter number of active 'bulletins' (0 to 99)"
  1555.       GOSUB 50345
  1556.       LINE INPUT;HJ$
  1557.       B1% = VAL(HJ$)
  1558.       IF B1% < 0 OR B1% > 99 THEN _
  1559.          GOTO 15290
  1560.       ACTIVE.BULLETINS = B1%
  1561.       RETURN
  1562. '
  1563. ' *****************************************************************************
  1564. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE                                 *
  1565. ' *****************************************************************************
  1566. '
  1567. 15460 GOSUB 17330
  1568.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") THEN _
  1569.          RETURN
  1570.       MAIN.MESSAGE.FILE$ = SJ$ + ":" + HJ$
  1571.       MAIN.MESSAGE.BACKUP$ = MAIN.MESSAGE.FILE$ + ".BAK"
  1572.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1573.       RETURN
  1574. '
  1575. ' *****************************************************************************
  1576. ' * DETERMINE THE NAME OF THE "CALLERS" FILE                                  *
  1577. ' *****************************************************************************
  1578. '
  1579. 15461 GOSUB 17330
  1580.       CALLERS.FILE$ = SJ$ + ":" + HJ$
  1581.       RETURN
  1582. '
  1583. ' *****************************************************************************
  1584. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE                                 *
  1585. ' *****************************************************************************
  1586. '
  1587. 15462 GOSUB 17330
  1588.       COMMENTS.FILE$ = SJ$ + ":" + HJ$
  1589.       RETURN
  1590. '
  1591. ' *****************************************************************************
  1592. ' * DETERMINE THE NAME OF THE "USERS" FILE                                    *
  1593. ' *****************************************************************************
  1594. '
  1595. 15500 GOSUB 17330
  1596.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") THEN _
  1597.          RETURN
  1598.       MAIN.USER.FILE$ = SJ$ + ":" + HJ$
  1599.       MAINUSR$ = MAIN.USER.FILE$
  1600.       RETURN
  1601. '
  1602. ' *****************************************************************************
  1603. ' * ALLOW A SYSOP TO SPECIFY THE FOREGROUND COLOR FOR THE LOCAL COLOR MONITOR *
  1604. ' *****************************************************************************
  1605. '
  1606. 15530 XX$ = "Enter foreground color (0-15,see BASIC manual)"
  1607.       GOSUB 50345
  1608.       LINE INPUT;HJ$
  1609.       B1 = VAL(HJ$)
  1610.       IF B1 < 0 OR B1 > 15 THEN _
  1611.          GOTO 15530
  1612.       FG = B1
  1613.       RETURN
  1614. '
  1615. ' *****************************************************************************
  1616. ' * ALLOW A SYSOP TO SPECIFY THE BACKGROUND COLOR FOR THE LOCAL COLOR MONITOR *
  1617. ' *****************************************************************************
  1618. '
  1619. 15590 XX$ = "Enter background color (0-7,see BASIC manual)"
  1620.       GOSUB 50345
  1621.       LINE INPUT;HJ$
  1622.       B1 = VAL(HJ$)
  1623.       IF B1 < 0 OR B1 > 7 THEN _
  1624.          GOTO 15590
  1625.       BG = B1
  1626.       RETURN
  1627. '
  1628. ' *****************************************************************************
  1629. ' * ALLOW A SYSOP TO SPECIFY THE BORDER COLOR THE LOCAL COLOR MONITOR         *
  1630. ' *****************************************************************************
  1631. '
  1632. 15650 XX$ = "Enter the border color (0-7,see BASIC manual)"
  1633.       GOSUB 50345
  1634.       LINE INPUT;HJ$
  1635.       B1 = VAL(HJ$)
  1636.       IF B1 < 0 OR B1 > 7 THEN _
  1637.          GOTO 15650
  1638.       BORDER = B1
  1639.       RETURN
  1640. '
  1641. ' *****************************************************************************
  1642. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?                          *
  1643. ' *****************************************************************************
  1644. '
  1645. 15710 CLS
  1646.       GOSUB 15780
  1647.       A$ = "RBBS-PC to use modem commands you specified as follows:"
  1648.       IF M14$ = "YES" THEN _
  1649.      A$ ="RBBS-PC to use standard modem commands as follows:"
  1650.       PRINT A$
  1651.       PRINT ""
  1652.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1653.       PRINT ""
  1654.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1655.       PRINT "   Note: End item 2 with:"
  1656.       PRINT "     S0=1X1 if answer on 0 rings"
  1657.       PRINT "     S0=254 if answer on >0 rings (no ring-back)"
  1658.       PRINT "     S0=255 if answer on >0 rings (with ring-back)"
  1659.       PRINT ""
  1660.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1661.       PRINT ""
  1662.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1663.       PRINT ""
  1664.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1665.       PRINT ""
  1666.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1667.       PRINT ""
  1668.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$
  1669.       PRINT "   Note: End item 7 with:"
  1670.       PRINT "     Q1 if item 2 ends with S0=255"
  1671.       PRINT ""
  1672.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1673.       XX$ = "Select command string to change (1 to 8, CR to end)"
  1674.       GOSUB 50345
  1675.       LINE INPUT;HJ$
  1676.       IF HJ$ = "" THEN _
  1677.          RETURN
  1678.       IF VAL(HJ$) <1 OR VAL(HJ$) > 8 THEN _
  1679.          GOTO 15710
  1680.       I = VAL(HJ$)
  1681.       XX$ = "Enter modem command for item" + STR$(I) + " :"
  1682.       GOSUB 50345
  1683.       LINE INPUT;HJ$
  1684.       GOSUB 50654
  1685.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1686. 15712 USER.RESET.COMMAND$ = HJ$
  1687.       GOTO 15710
  1688. 15714 USER.INIT.COMMAND$ = HJ$
  1689.       GOTO 15710
  1690. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1691.       GOTO 15710
  1692. 15718 USER.ANSWER.COMMAND$ = HJ$
  1693.       GOTO 15710
  1694. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1695.       GOTO 15710
  1696. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1697.       GOTO 15710
  1698. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1699.       GOTO 15710
  1700. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1701.       GOTO 15710
  1702. 15780 M14$ = "NO"
  1703.       IF MODEM.ANSWER.COMMAND$ = USER.ANSWER.COMMAND$ AND _
  1704.          MODEM.COUNT.RINGS.COMMAND$ = USER.COUNT.RINGS.COMMAND$ AND _
  1705.          MODEM.GO.OFFHOOK.COMMAND$ = USER.GO.OFFHOOK.COMMAND$ AND _
  1706.          MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=")-1) = MID$(USER.INIT.COMMAND$,1,INSTR(USER.INIT.COMMAND$,"S0=")-1)  AND _
  1707.          MODEM.RESET.COMMAND$ = USER.RESET.COMMAND$ AND _
  1708.          FIRMWARE.INITIALIZE.COMMAND$ = USER.INITIALIZE.COMMAND$ AND _
  1709.          FIRMWARE.CLEAR.COMMAND$ = USER.FIRMWARE.CLEAR.CMND$ AND _
  1710.          FIRMWARE.WRITE.COMMAND$ = USER.FIRMWARE.WRITE.CMND$ THEN _
  1711.          M14$ = "YES"
  1712.       RETURN
  1713. 15790 FIRMWARE.INITIALIZE.COMMAND$= "AT&C1&D3B1E0V1M0S0=0&T5"
  1714.       FIRMWARE.CLEAR.COMMAND$    = "AT&F"
  1715.       FIRMWARE.WRITE.COMMAND$    = "&W"
  1716.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
  1717.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
  1718.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
  1719.       USER.INIT.COMMAND$ = MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=")-1)
  1720.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
  1721.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
  1722.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
  1723.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
  1724.       RETURN
  1725. '
  1726. ' *****************************************************************************
  1727. ' * SHOULD USERS BE REMINDED OF THE MESSAGES THAT THEY LEFT?                  *
  1728. ' *****************************************************************************
  1729. '
  1730. 15800 XX$ = "Remind users of the messages they left? (YES or NO) "
  1731.       GOSUB 50345
  1732.       GOSUB 22380
  1733.       ON AB GOTO 15810,15810,15800,15800
  1734. 15810 MESSAGE.REMINDER$ = HJ$
  1735.       RETURN
  1736. '
  1737. ' *****************************************************************************
  1738. ' * SHOULD MACHINE LANGUAGE ROUTINES BE USED TO INCREASE SPEED?               *
  1739. ' *****************************************************************************
  1740. '
  1741. 15820 CALL GETYESNO ("Use machine language routines for speed",TURBO.RBBS$)
  1742.       RETURN
  1743. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1744.       RETURN
  1745. '
  1746. ' *****************************************************************************
  1747. ' * IS THE USER ALLOWED TO BYPASS THE SYSTEM BULLETINS?                       *
  1748. ' *****************************************************************************
  1749. '
  1750. 15840 XX$ = "Are system bulletins to be optional? (YES or NO) "
  1751.       GOSUB 50345
  1752.       GOSUB 22380
  1753.       ON AB GOTO 15860,15860,15840,15840
  1754. 15860 BULLETINS.OPTIONAL$ = HJ$
  1755.       RETURN
  1756. '
  1757. ' *****************************************************************************
  1758. ' * SHOULD USER'S BE PREVENTED FROM DOWNLOADING FILES IN ASCII?               *
  1759. ' *****************************************************************************
  1760. '
  1761. 15880 XX$ = "Is non-ascii protocol required for binary files? (YES or NO) "
  1762.       GOSUB 50345
  1763.       GOSUB 22380
  1764.       ON AB GOTO 15900,15900,15880,15880
  1765. 15900 REQUIRE.NON.ASCII$ = HJ$
  1766.       RETURN
  1767. '
  1768. ' *****************************************************************************
  1769. ' * IS MICROCOM'S MNP PROTOCOL TO BE MADE AVAILABLE?                          *
  1770. ' *****************************************************************************
  1771. '
  1772. 15911 XX$ = "Enable MICROCOM's MNP protocol? (YES or NO) "
  1773.       GOSUB 50345
  1774.       GOSUB 22380
  1775.       ON AB GOTO 15913,15913,15911,15911
  1776. 15913 MNP.SUPPORT$ = HJ$
  1777.       RETURN
  1778. '
  1779. ' *****************************************************************************
  1780. ' * SHOULD THE MAIN DIRECTORY (TEXT FILE) BE OMITTED FROM THE "NEW" COMMAND?  *
  1781. ' *****************************************************************************
  1782. '
  1783. 15920 XX$ = "Is " + DIRECTORY.EXTENTION$ + " omitted from the N)ew command? (YES or NO) "
  1784.       GOSUB 50345
  1785.       GOSUB 22380
  1786.       ON AB GOTO 15940,15940,15920,15920
  1787. 15940 OMIT.MAIN.DIRECTORY$ = HJ$
  1788.       RETURN
  1789. '
  1790. ' *****************************************************************************
  1791. ' * IS "EXTENDED" LOGGING TO THE CALLERS FILE TO BE ACTIVATED?                *
  1792. ' *****************************************************************************
  1793. '
  1794. 15991 XX$ = "Do you want EXTENDED logging to the 'callers' file (YES OR NO) "
  1795.       GOSUB 50345
  1796.       GOSUB 22380
  1797.       ON AB GOTO 15992,15992,15991,15991
  1798. 15992 EXTENDED.LOGGING$ = HJ$
  1799.       RETURN
  1800. '
  1801. ' *****************************************************************************
  1802. ' * ARE COMMENTS TO BE RECORDED AS PRIVATE MESSAGES IN THE MESSAGE FILE?      *
  1803. ' *****************************************************************************
  1804. '
  1805. 15993 XX$ = "Do you want 'comments' recorded as private messages (YES OR NO) "
  1806.       GOSUB 50345
  1807.       GOSUB 22380
  1808.       ON AB GOTO 15994,15994,15993,15993
  1809. 15994 COMMENTS.AS.MESSAGES$ = HJ$
  1810.       RETURN
  1811. '
  1812. ' *****************************************************************************
  1813. ' * CAN THE USER INTERRUPT THE "WELCOME" FILE DISPLAY WHEN HE LOGS ON?        *
  1814. ' *****************************************************************************
  1815. '
  1816. 16000 XX$ = "Is system 'welcome' interruptable (YES OR NO) "
  1817.       GOSUB 50345
  1818.       GOSUB 22380
  1819.       ON AB GOTO 16020,16020,16000,16000
  1820. 16020 WELCOME.INTERRUPTABLE$ = HJ$
  1821.       RETURN
  1822. '
  1823. ' *****************************************************************************
  1824. ' * HOW MANY SECONDS SHOULD USERS BE ALLOWED TO BE IDLE BEFORE LOGGING HIM OFF*
  1825. ' *****************************************************************************
  1826. '
  1827. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1828.       RETURN
  1829. '
  1830. ' *****************************************************************************
  1831. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON                                                                          *
  1832. ' *****************************************************************************
  1833. '
  1834. 16040 CLS
  1835.       LOCATE 5,5
  1836.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1837.       LOCATE 7,10
  1838.       PRINT "0.   IBM PC, IBM XT, or IBM AT"
  1839.       LOCATE 9,10
  1840.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1841.       LOCATE 11,10
  1842.       PRINT "2.   IBM PCjr
  1843.       LOCATE 13,10
  1844.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1845. 16050 GOSUB 50340
  1846.       XX$ = "Select environment (0 to 3, CR to end)"
  1847.       GOSUB 50345
  1848.       LINE INPUT;X$
  1849.       IF X$ = "" THEN _
  1850.          RETURN
  1851.       COMPUTER.TYPE = VAL(X$)
  1852. 16060 IF COMPUTER.TYPE < 0 OR COMPUTER.TYPE > 3 THEN _
  1853.          GOTO 16050
  1854. 16062 IF COMPUTER.TYPE = 0 THEN _
  1855.          COMPUTER.TYPE$ = "IBM PC, XT, or AT" : _
  1856.          RETURN
  1857.       IF COMPUTER.TYPE = 1 THEN _
  1858.          COMPUTER.TYPE$ = "Compaq/Plus" : _
  1859.          RETURN
  1860.       IF COMPUTER.TYPE = 2 THEN _
  1861.          COMPUTER.TYPE$ = "PCjr" : _
  1862.          GOTO 16071
  1863.       IF COMPUTER.TYPE = 3 THEN _
  1864.          COMPUTER.TYPE$ = "Other under PC-DOS"
  1865.       RETURN
  1866. 16071 PCJR = 0
  1867.       XX$ = "Is an IBM PCjr Internal Modem installed? (YES or NO)"
  1868.       GOSUB 50345
  1869.       GOSUB 22380
  1870.       ON AB GOTO 16072,16073,16071,16071
  1871. 16072 PCJR = 1
  1872. 16073 RETURN
  1873. '
  1874. ' *****************************************************************************
  1875. ' * CAN MODEM COMMANDS BE ISSUED EVEN WHEN THE MODEM IS RINGING?              *
  1876. ' *****************************************************************************
  1877. '
  1878. 16121 XX$ = "Wait to issue modem commands between rings? (YES OR NO) "
  1879.       GOSUB 50345
  1880.       GOSUB 22380
  1881.       ON AB GOTO 16123,16123,16121,16121
  1882. 16123 COMMANDS.BETWEEN.RINGS$ = HJ$
  1883.       RETURN
  1884. '
  1885. ' *****************************************************************************
  1886. ' * WHAT BAUD RATE SHOULD RBBS-PC INITIALLY OPEN THE MODEM AT?                *
  1887. ' *****************************************************************************
  1888. '
  1889. 16124 XX$ = "Enter baud rate (300, 1200, 2400, 4800, 9600) to open modem at "
  1890.       GOSUB 50345
  1891.       LINE INPUT;HJ$
  1892.       B1 = VAL(HJ$)
  1893.       IF B1 = 300 OR B1 = 1200 OR B1 = 2400 OR B1 = 4800 OR B1 = 9600 THEN _
  1894.          GOTO 16128 ELSE _
  1895.       GOTO 16124
  1896. 16128 MODEM.INIT.BAUD$ = MID$(STR$(B1),2)
  1897.       RETURN
  1898. '
  1899. ' *****************************************************************************
  1900. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'                    *
  1901. ' *****************************************************************************
  1902. '
  1903. 16130 GOSUB 17330
  1904.       MENU$(5) = SJ$ + ":" + HJ$
  1905.       RETURN
  1906. '
  1907. ' *****************************************************************************
  1908. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'         *
  1909. ' *****************************************************************************
  1910. '
  1911. 16140 GOSUB 17330
  1912.       RCTTY.BAT$ = SJ$ + ":" + HJ$
  1913.       RETURN
  1914. '
  1915. ' *****************************************************************************
  1916. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'            *
  1917. ' *****************************************************************************
  1918. '
  1919. 16150 GOSUB 17330
  1920.       RBBS.BAT$ = SJ$ + ":" + HJ$
  1921.       RETURN
  1922. '
  1923. ' *****************************************************************************
  1924. ' * DRIVE TO LOOK FOR 'COMMAND.COM' ON                                        *
  1925. ' *****************************************************************************
  1926. '
  1927. 16160 A$ = "COMMAND.COM "
  1928.       GOSUB 13253
  1929.       DISK.FOR.DOS$ = HJ$ + ":"
  1930.       RETURN
  1931. '
  1932. ' *****************************************************************************
  1933. ' * REDIRECT I/O VIA THE 'CTTY' COMMAND                                       *
  1934. ' *****************************************************************************
  1935. '
  1936. 16170 CALL GETYESNO ("Use the CTTY command to redirect I/O on dropping to DOS?",REDIRECT.IO.METHOD$)
  1937.       RETURN
  1938. '
  1939. ' *****************************************************************************
  1940. ' * INVOKE THE RBBS-PC 'DRIVERS' VIA THE SHELL COMMAND                        *
  1941. ' *****************************************************************************
  1942. '
  1943. 16180 CALL GETYESNO ("Use the SHELL command to invoke protocol drivers?",GO.TO.SHELL$)
  1944.       IF GO.TO.SHELL$ = "YES" THEN _
  1945.          GO.TO.SHELL$ = "SHELL" : _
  1946.          RETURN
  1947.       IF GO.TO.SHELL$ = "NO" THEN _
  1948.          GO.TO.SHELL$ = "EXIT RBBS"
  1949.       RETURN
  1950. '
  1951. ' *****************************************************************************
  1952. ' * SHOULD "DOORS" BE AVAILABLE?                                              *
  1953. ' *****************************************************************************
  1954. '
  1955. 16290 XX$ = "Is the 'door' subsystem available? (YES or NO) "
  1956.       GOSUB 50345
  1957.       GOSUB 22380
  1958.       ON AB GOTO 16310,16310,16290,16290
  1959. 16310 DOORS.AVAILABLE$ = HJ$
  1960.       IF DOORS.AVAILABLE$ = "NO" THEN _
  1961.          RETURN
  1962.       GOSUB 50340
  1963.       LOCATE 24,1
  1964.       PRINT "Will you be running RBBS-PC under MultiLink from The Software Link? ";
  1965.       GOSUB 22380
  1966.       ON AB GOTO  16340,16350,16290,16290
  1967. 16340 DELAY! = FNTI! + 15
  1968. '
  1969. ' *****************************************************************************
  1970. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"              *
  1971. ' *****************************************************************************
  1972. '
  1973.       CLS
  1974.       PRINT "                ******Warning******"
  1975.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1976.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1977.       PRINT "communication port!  Unless the software that you invoke via
  1978.       PRINT "the RBBS-PC 'door' mechanism monitors the communication line,"
  1979.       PRINT "your system will be vulnerable to being hung -- and worse!!!"
  1980.       PRINT "If you don't THROUGHLY understand the section in RBBS-PC's"
  1981.       PRINT "documentation which discusses the pitfalls of opening RBBS-PC's"
  1982.       PRINT "'doors' to your users, DON'T use 'doors'!!!!!"
  1983. 16345 IF FNTI! < DELAY! THEN _
  1984.          GOTO 16345
  1985.       CLS
  1986.       PRINT "                ******Warning******"
  1987.       PRINT "Some environments require that you set the modem to answer"
  1988.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  1989.       PRINT "using doors because if a user in a door gets disconnected"
  1990.       PRINT "the modem is set to answer on the very next ring and someone who"
  1991.       PRINT "you may not want in the door or in DOS will find themselves"
  1992.       PRINT "able to do you grevious harm.  If you have this type of environ-"
  1993.       PRINT "ment and insist on using 'doors' or dropping to DOS remotely,"
  1994.       PRINT "you may now choose to shoot yourself in the foot (or any other"
  1995.       PRINT "part of the anatomy that is appropriate for such foolhardiness)."
  1996.       CALL GETYESNO ("Do you want to shoot yourself in the foot",SHOOT.YOURSELF$)
  1997.       RETURN
  1998. 16350 CLS
  1999. '
  2000. ' *****************************************************************************
  2001. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC UNDER MULTI-LINK     *
  2002. ' *****************************************************************************
  2003. '
  2004.       PRINT "Multi-Link is a software product of The Software Link, Inc. located"
  2005.       PRINT "at 8601 Dunwoody Place, Suite 632, Atlanta, Georgia  30338.  It allows"
  2006.       PRINT "IBM's DOS 2.x, or 3.x on the IBM PC to become a multi-tasking operating"
  2007.       PRINT "system.  The Capital PC User Group has no connection whatsoever with"
  2008.       PRINT "this company or it's products.  In fact The Software Link has only"
  2009.       PRINT "occasionally sent updates of it's new releases to me.  RBBS-PC has"
  2010.       PRINT "only been tested under Release 3.02 of MultiLink and earlier versions
  2011.       PRINT "of MultiLink.  I feel strongly that IBM's DOS for the PC should be"
  2012.       PRINT "multi-tasking.  Because MultiLink provides this capability for the widest
  2013.       PRINT "ranges of DOS software for the IBM PC, RBBS-PC has been enhanced"
  2014.       PRINT "to run under Multi-Link.  Any questions regarding RBBS-PC under Multi-Link"
  2015.       PRINT "(other than Release 3.02 of Multi-Link) should be directed to The
  2016.       PRINT "Software Link's customer support group at (404) 998-0788."
  2017.       PRINT ""
  2018.       PRINT "I have run RBBS-PC under Multi-Link since December 1983 -- since Multi-Link"
  2019.       PRINT "release 2.04.  Since Multi-Link release 2.06 I HAVE NEVER HAD A SYSTEM CRASH
  2020.       PRINT "due to Multi-Link.  I think it is a quality product but a bit over-priced."
  2021.       PRINT "My opnion on Multi-Link's price reflects my prejudice that all PC software"
  2022.       PRINT "should be relatively inexpensive."
  2023.       PRINT ""
  2024.       PRINT SPC(60);"Tom Mack
  2025.       PRINT SPC(60);"May, 25, 1986"
  2026. 16360 LOCATE 23,1
  2027.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  2028. 16370 GOSUB 50340
  2029.       LOCATE 24,1
  2030.       PRINT "Enter Multi-Link terminal type for DOORS ";
  2031.       GOSUB 17420
  2032.       DOORS.TERMINAL.TYPE = B1
  2033.       IF DOORS.TERMINAL.TYPE < 0 THEN _
  2034.          GOTO 16370
  2035.       IF DOORS.TERMINAL.TYPE > 12 THEN _
  2036.          GOTO 16370
  2037.       RETURN
  2038. '
  2039. ' *****************************************************************************
  2040. ' * SHOULD USERS BE LIMITED TO A MAXIMUM AMOUNT OF TIME ON THE SYSTEM EACH DAY*
  2041. ' *****************************************************************************
  2042. '
  2043. 16650 XX$ = "Limit the maximum time a users can be on each day? (YES or NO) "
  2044.       GOSUB 50345
  2045.       GOSUB 22380
  2046.       ON AB GOTO 16670,16670,16650,16650
  2047. 16670 LIMIT.DAILY.TIME$ = HJ$
  2048.       RETURN
  2049. '
  2050. ' *****************************************************************************
  2051. ' * SHOULD USERS BE REMINDED OF THE NUMBER FILE TRANSFERS THAT THEY HAVE DONE?*
  2052. ' *****************************************************************************
  2053. '
  2054. 16690 XX$ = "Remind users of # uploads and downloads? (YES or NO) "
  2055.       GOSUB 50345
  2056.       GOSUB 22380
  2057.       ON AB GOTO 16710,16710,16690,16690
  2058. 16710 REMIND.FILE.TRANSFERS$ = HJ$
  2059.       RETURN
  2060. '
  2061. ' *****************************************************************************
  2062. ' * SHOULD USERS BE REMINDED OF THEIR TERMINAL'S PROVILE?                     *
  2063. ' *****************************************************************************
  2064. '
  2065. 16722 XX$ = "Remind users of their terminal's profile? (YES or NO) "
  2066.       GOSUB 50345
  2067.       GOSUB 22380
  2068.       ON AB GOTO 16724,16724,16722,16722
  2069. 16724 REMIND.PROFILE$ = HJ$
  2070.       RETURN
  2071. '
  2072. ' *****************************************************************************
  2073. ' * ALLOW THE SYSOP TO SELECT "DUMB" MODEM (BUT WITH AUTO-ANSWER) MODE        *
  2074. ' *****************************************************************************
  2075. '
  2076. 16725 XX$ = "Are you using a non-Hayes auto-answer only modem? (YES or NO) "
  2077.       GOSUB 50345
  2078.       GOSUB 22380
  2079.       ON AB GOTO 16726,16726,16725,16725
  2080. 16726 DUMB.MODEM$ = HJ$
  2081.       RETURN
  2082. '
  2083. ' *****************************************************************************
  2084. ' * SELECT A DEFAULT USER'S PAGE LENGTH                                       *
  2085. ' *****************************************************************************
  2086. '
  2087. 16730 XX$ = "Default user page length?(a value between 0 and 255)"
  2088.       GOSUB 50345
  2089.       LINE INPUT;HJ$
  2090.       B1 = VAL(HJ$)
  2091.       IF B1 < 0 OR B1 > 255 THEN _
  2092.          GOTO 16730
  2093.       PAGE.LENGTH = B1
  2094.       RETURN
  2095. '
  2096. ' *****************************************************************************
  2097. ' * SPECIFY THE MAXIMUM NUMBER OF LINES ALLOWED PER MESSAGE                   *
  2098. ' *****************************************************************************
  2099. '
  2100. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  2101.       RETURN
  2102. '
  2103. ' *****************************************************************************
  2104. ' * MINIMUM SECURITY LEVEL TO GET ONTO RBBS-PC                                *
  2105. ' *****************************************************************************
  2106. '
  2107. 17160 GOSUB 18730
  2108.       GOSUB 17410
  2109.       MINIMUM.LOGON.SECURITY = B1
  2110.       RETURN
  2111. '
  2112. ' *****************************************************************************
  2113. ' * DEFAULT SECURITY LEVEL FOR NEW USERS                                      *
  2114. ' *****************************************************************************
  2115. '
  2116. 17170 GOSUB 18730
  2117.       GOSUB 17410
  2118.       DEFAULT.SECURITY.LEVEL = B1
  2119.       RETURN
  2120. '
  2121. ' *****************************************************************************
  2122. ' * SECURITY LEVEL FOR SYSOP                                                  *
  2123. ' *****************************************************************************
  2124. '
  2125. 17180 GOSUB 18730
  2126.       GOSUB 17410
  2127.       SYSOP.SECURITY.LEVEL = B1
  2128.       RETURN
  2129. '
  2130. ' *****************************************************************************
  2131. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY                         *
  2132. ' *****************************************************************************
  2133. '
  2134. 17190 GOSUB 17330
  2135.       FILESEC.FILE$ = SJ$ + ":" + HJ$
  2136.       RETURN
  2137. '
  2138. ' *****************************************************************************
  2139. ' * MINIMUM SECURITY LEVEL TO SEE THE SYSOP MENU                              *
  2140. ' *****************************************************************************
  2141. '
  2142. 17200 GOSUB 18730
  2143.       GOSUB 17410
  2144.       SYSOP.MENU.SECURITY.LEVEL = B1
  2145.        RETURN
  2146. '
  2147. ' *****************************************************************************
  2148. ' * MINIMUM SECURITY LEVEL TO USE 'DOORS'                                     *
  2149. ' *****************************************************************************
  2150. '
  2151. 17210 GOSUB 18730
  2152.       GOSUB 17410
  2153.       DOORS.SECURITY.LEVEL = B1
  2154.       RETURN
  2155. '
  2156. ' *****************************************************************************
  2157. ' * MAXIMUM NUMBER OF SECURITY VIOLATIONS ALLOWED IN A SINGLE SESSION         *
  2158. ' *****************************************************************************
  2159. '
  2160. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  2161.       RETURN
  2162. '
  2163. ' *****************************************************************************
  2164. ' *  ASSIGN SECURITY LEVELS TO THE SYSOP COMMANDS                             *
  2165. ' *****************************************************************************
  2166. '
  2167. 17230 CO$ = "SYSOP"
  2168.       IF IPAGE = 2 THEN _
  2169.          XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
  2170.       ELSE_
  2171.          XX$ = "ALL " + CO$ + " commands have security? (YES or NO)"
  2172.       GOSUB 50345
  2173.       GOSUB 22380
  2174.       ON AB GOTO 17232,17231,17230,17230
  2175. 17231 IF IPAGE = 2 THEN _
  2176.           SYSOP.COMMANDS$ = SYSOP.COMMANDS.DEFAULTS$ : _
  2177.           FOR I = 1 TO NUM.SYSOP : _
  2178.               SYSOP.FUNCTION$(I,2) = MID$(SYSOP.COMMANDS$,I,1) : _
  2179.           NEXT : _
  2180.           RETURN
  2181.       HJ$ = "all " + CO$ + " commands"
  2182.       GOSUB 17410
  2183.       FOR I = 1 TO NUM.SYSOP
  2184.           SYSOP.FUNCTION(I) = B1
  2185.       NEXT
  2186.       SF = B1
  2187.       RETURN
  2188. 17232 GOSUB 25180
  2189.       IROW = 4
  2190.       ICOL = 10
  2191.       FOR I = 1 TO NUM.SYSOP
  2192.          LOCATE IROW+I,ICOL
  2193.          IF IPAGE <> 2 THEN _
  2194.             PRINT SYSOP.FUNCTION$(I,1) + STR$(SYSOP.FUNCTION(I))_
  2195.          ELSE _
  2196.             PRINT SYSOP.FUNCTION$(I,1);" ";SYSOP.FUNCTION$(I,2)
  2197.       NEXT
  2198. 17233 GOSUB 25210
  2199.       IF X$ = "" THEN _
  2200.          RETURN
  2201.       FF = VAL(X$)
  2202.       IF (FF < 1 OR FF > NUM.SYSOP) THEN _
  2203.          GOTO 17233
  2204.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2205.       GOSUB 17410
  2206.       IF IPAGE = 2 THEN _
  2207.          SYSOP.FUNCTION$(FF,2) = HK$ : _
  2208.          MID$(SYSOP.COMMANDS$,FF,1) = HK$ _
  2209.       ELSE _
  2210.          SYSOP.FUNCTION(FF) = B1
  2211.       GOTO 17232
  2212. '
  2213. ' *****************************************************************************
  2214. ' *  ASSIGN SECURITY LEVELS TO THE MAIN MENU'S COMMANDS                       *
  2215. ' *****************************************************************************
  2216. '
  2217. 17240 CO$ = "Main Menu"
  2218.       IF IPAGE = 2 THEN _
  2219.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
  2220.       ELSE_
  2221.         XX$ = "ALL " + CO$ + " commands have SAME security? (YES or NO)"
  2222.       GOSUB 50345
  2223.       GOSUB 22380
  2224.       ON AB GOTO 17242,17241,17240,17240
  2225. 17241 IF IPAGE = 2 THEN _
  2226.         MAIN.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ : _
  2227.         FOR I = 1 TO NUM.MAIN : _
  2228.            MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1) : _
  2229.         NEXT : _
  2230.         RETURN
  2231.       HJ$ = "all " + CO$ + " commands"
  2232.       GOSUB 17410
  2233.       FOR I = 1 TO NUM.MAIN
  2234.           MAIN.FUNCTION(I) = B1
  2235.       NEXT
  2236.       MM = B1
  2237.       RETURN
  2238. 17242 GOSUB 25180
  2239.       IROW = 4
  2240.       ICOL = 10
  2241.       FOR I = 1 TO NUM.MAIN
  2242.          LOCATE IROW+I,ICOL
  2243.          IF IPAGE = 2 THEN _
  2244.            PRINT MAIN.FUNCTION$(I,1);" ";MAIN.FUNCTION$(I,2);_
  2245.          ELSE _
  2246.            PRINT MAIN.FUNCTION$(I,1);STR$(MAIN.FUNCTION(I));
  2247.       NEXT
  2248. 17243 GOSUB 25210
  2249.       IF X$ = "" THEN _
  2250.          RETURN
  2251.       SWAP HJ$,X$
  2252.       GOSUB 50654
  2253.       SWAP HJ$,X$
  2254.       FF = INSTR(MAIN.COMMANDS.DEFAULTS$,X$)
  2255.       IF FF = 0 THEN _
  2256.          GOTO 17243
  2257.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2258.       GOSUB 17410
  2259.       IF IPAGE = 2 THEN _
  2260.         MAIN.FUNCTION$(FF,2) = HK$ : _
  2261.         MID$(MAIN.COMMANDS$,FF,1) = HK$ _
  2262.       ELSE _
  2263.         MAIN.FUNCTION(FF) = B1
  2264.       GOTO 17242
  2265. '
  2266. ' *****************************************************************************
  2267. ' *  ASSIGN SECURITY LEVELS TO THE FILE MENU'S COMMANDS                       *
  2268. ' *****************************************************************************
  2269. '
  2270. 17250 CO$ = "File Menu"
  2271.       IF IPAGE = 2 THEN _
  2272.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
  2273.       ELSE_
  2274.         XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"
  2275.       GOSUB 50345
  2276.       GOSUB 22380
  2277.       ON AB GOTO 17252,17251,17250,17250
  2278. 17251 IF IPAGE = 2 THEN _
  2279.         FILE.COMMANDS$ = FILE.COMMANDS.DEFAULTS$ : _
  2280.         FOR I=1 TO NUM.FILES : _
  2281.           FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1) : _
  2282.         NEXT : _
  2283.         RETURN
  2284.       HJ$ = "all " + CO$ + " commands"
  2285.       GOSUB 17410
  2286.       FOR I = 1 TO NUM.FILES
  2287.          FILES.FUNCTION(I) = B1
  2288.       NEXT
  2289.       FC = B1
  2290.       RETURN
  2291. 17252 GOSUB 25180
  2292.       IROW = 4
  2293.       ICOL = 10
  2294.       FOR I = 1 TO NUM.FILES
  2295.          LOCATE IROW+I,ICOL
  2296.          IF IPAGE = 2 THEN _
  2297.            PRINT FILES.FUNCTION$(I,1);" ";FILES.FUNCTION$(I,2);_
  2298.          ELSE_
  2299.            PRINT FILES.FUNCTION$(I,1);STR$(FILES.FUNCTION(I));
  2300.       NEXT
  2301. 17253 GOSUB 25210
  2302.       IF X$ = "" THEN _
  2303.          RETURN
  2304.       SWAP HJ$,X$
  2305.       GOSUB 50654
  2306.       SWAP HJ$,X$
  2307.       FF = INSTR(FILE.COMMANDS.DEFAULTS$,X$)
  2308.       IF FF = 0 THEN _
  2309.          GOTO 17253
  2310.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2311.       GOSUB 17410
  2312.       IF IPAGE = 2 THEN _
  2313.         FILES.FUNCTION$(FF,2) = HK$ : _
  2314.         MID$(FILE.COMMANDS$,FF,1) = HK$ _
  2315.       ELSE _
  2316.         FILES.FUNCTION(FF) = B1
  2317.       GOTO 17252
  2318. '
  2319. ' *****************************************************************************
  2320. ' *  ASSIGN SECURITY LEVELS TO THE UTILITY MENU'S COMMANDS                    *
  2321. ' *****************************************************************************
  2322. '
  2323. 17260 CO$ = "Utilities"
  2324.       IF IPAGE <> 2 THEN _
  2325.         XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"_
  2326.       ELSE_
  2327.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"
  2328.       GOSUB 50345
  2329.       GOSUB 22380
  2330.       ON AB GOTO 17262,17261,17260,17260
  2331. 17261 IF IPAGE = 2 THEN _
  2332.         UTIL.COMMANDS$ = UTIL.COMMANDS.DEFAULTS$ : _
  2333.         FOR I = 1 TO NUM.UTILITY : _
  2334.            UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1) : _
  2335.         NEXT : _
  2336.         RETURN
  2337.         HJ$ = "all " + CO$ + " commands"
  2338.       GOSUB 17410
  2339.             FOR I = 1 TO NUM.UTILITY
  2340.          UTILITY.FUNCTION(I) = B1
  2341.       NEXT
  2342.       UE = B1
  2343.       RETURN
  2344. 17262 GOSUB 25180
  2345.       IROW = 4
  2346.       ICOL = 10
  2347.       FOR I = 1 TO NUM.UTILITY
  2348.          LOCATE IROW+I,ICOL
  2349.          IF IPAGE <> 2 THEN_
  2350.             PRINT UTILITY.FUNCTION$(I,1);STR$(UTILITY.FUNCTION(I))_
  2351.          ELSE_
  2352.             PRINT UTILITY.FUNCTION$(I,1);" ";UTILITY.FUNCTION$(I,2)
  2353.       NEXT
  2354. 17263 GOSUB 25210
  2355.       IF X$ = "" THEN _
  2356.          RETURN
  2357.       SWAP HJ$,X$
  2358.       GOSUB 50654
  2359.       SWAP HJ$,X$
  2360.       FF = INSTR(UTIL.COMMANDS.DEFAULTS$,X$)
  2361.       IF FF = 0 THEN _
  2362.          GOTO 17263
  2363.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2364.       GOSUB 17410
  2365.       IF IPAGE = 2 THEN_
  2366.         UTILITY.FUNCTION$(FF,2) = HK$ : _
  2367.         MID$(UTIL.COMMANDS$,FF,1) = HK$ _
  2368.       ELSE _
  2369.         UTILITY.FUNCTION(FF) = B1
  2370.       GOTO 17262
  2371. '
  2372. ' *****************************************************************************
  2373. ' *  ASSIGN SECURITY LEVELS TO GLOBAL COMMANDS                                *
  2374. ' *****************************************************************************
  2375. '
  2376. 17264 CO$ = "Global"
  2377.       IF IPAGE <> 2 THEN _
  2378.         XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"_
  2379.       ELSE_
  2380.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"
  2381.       GOSUB 50345
  2382.       GOSUB 22380
  2383.       ON AB GOTO 17266,17265,17264,17264
  2384. 17265 IF IPAGE = 2 THEN _
  2385.         GLOBAL.COMMANDS$ = GLOBAL.COMMANDS.DEFAULTS$ : _
  2386.         FOR I = 1 TO NUM.GLOBAL : _
  2387.           GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1) : _
  2388.         NEXT : _
  2389.         RETURN
  2390.       HJ$ = "all " + CO$ + " commands"
  2391.       GOSUB 17410
  2392.       FOR I = 1 TO NUM.GLOBAL
  2393.          GLOBAL.FUNCTION(I) = B1
  2394.       NEXT
  2395.       GB = B1
  2396.       RETURN
  2397. 17266 GOSUB 25180
  2398.       IROW = 4
  2399.       ICOL = 10
  2400.       FOR I = 1 TO NUM.GLOBAL
  2401.          LOCATE IROW+I,ICOL
  2402.          IF IPAGE = 2 THEN_
  2403.            PRINT GLOBAL.FUNCTION$(I,1);" ";GLOBAL.FUNCTION$(I,2)_
  2404.          ELSE_
  2405.            PRINT GLOBAL.FUNCTION$(I,1);STR$(GLOBAL.FUNCTION(I))
  2406.       NEXT
  2407. 17267 GOSUB 25210
  2408.       IF X$ = "" THEN _
  2409.          RETURN
  2410.       SWAP HJ$,X$
  2411.       GOSUB 50654
  2412.       SWAP HJ$,X$
  2413.       FF = INSTR(GLOBAL.COMMANDS.DEFAULTS$,X$)
  2414.       IF FF = 0 THEN _
  2415.          GOTO 17267
  2416.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2417.       GOSUB 17410
  2418.       IF IPAGE = 2 THEN _
  2419.          GLOBAL.FUNCTION$(FF,2) = HK$ : _
  2420.          MID$(GLOBAL.COMMANDS$,FF,1) = HK$ _
  2421.       ELSE _
  2422.          GLOBAL.FUNCTION(FF) = B1
  2423.       GOTO 17266
  2424. '
  2425. ' *****************************************************************************
  2426. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES*
  2427. ' *****************************************************************************
  2428. '
  2429. 17270 GOSUB 17330
  2430.       PASSWORD.FILE$ = SJ$ + ":" + HJ$
  2431.       RETURN
  2432. '
  2433. ' *****************************************************************************
  2434. ' *  MAXIMUM NUMBER OF TEMPORARY PASSWORD CHANGES ALLOWED IN A SINGLE SESSION *
  2435. ' *****************************************************************************
  2436. '
  2437. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2438.       RETURN
  2439. '
  2440. ' *****************************************************************************
  2441. ' * MINIMUM SECURITY LEVEL IN ORDER TO TEMPORARILY CHANGE PASSWORDS           *
  2442. ' *****************************************************************************
  2443. '
  2444. 17300 GOSUB 18730
  2445.       GOSUB 17410
  2446.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = B1
  2447.       RETURN
  2448. '
  2449. ' *****************************************************************************
  2450. ' * MINIMUM SECURITY LEVEL REQUIRED TO OVERWRITE FILES WHEN UPLOADING         *
  2451. ' *****************************************************************************
  2452. '
  2453. 17310 HJ$ = "overwriting files on upload"
  2454.       GOSUB 17410
  2455.       OVERWRITE.SECURITY.LEVEL = B1
  2456.       RETURN
  2457. '
  2458. ' *****************************************************************************
  2459. ' * SECURITY LEVEL THAT IS EXEMPT FROM BEING PURGED WHEN PACKING USER FILE    *
  2460. ' *****************************************************************************
  2461. '
  2462. 17316 GOSUB 18730
  2463.       GOSUB 17410
  2464.       SEC.LVL.EXEMPT.FRM.PURGING = B1
  2465.       RETURN
  2466. '
  2467. ' *****************************************************************************
  2468. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION         *
  2469. ' *****************************************************************************
  2470. '
  2471. 17330 X$ = OPTION$
  2472.       XX$ = "Specify drive (A->" + M$ + ") where file for option " + X$ + " will be located. "
  2473.       GOSUB 50345
  2474.       LINE INPUT;HJ$
  2475.       IF LEN(HJ$) <> 1 THEN _
  2476.          HJ$ = X$ : _
  2477.          GOTO 17330
  2478.       GOSUB 50654
  2479.       IF HJ$<"A" OR HJ$>M$ THEN _
  2480.          HJ$ = X$ : _
  2481.          GOTO 17330
  2482.       SJ$ = HJ$
  2483.       GOSUB 14980
  2484.       RETURN
  2485. '
  2486. ' *****************************************************************************
  2487. ' * STANDARD ROUTINE TO REQUEST A SECURITY LEVEL FOR A SPECIFIC COMMAND       *
  2488. ' *****************************************************************************
  2489. '
  2490. 17410 GOSUB 50340
  2491.       LOCATE 24,1
  2492.       XX$ = "Security level for " + HJ$ + " is? "
  2493.       IF IPAGE = 2 THEN _
  2494.          XX$ = "New command for " + HJ$ + " is? "
  2495.       PRINT XX$;
  2496. 17420 LINE INPUT;HK$
  2497.       IF HK$ = "" THEN HK$ = " "
  2498.       IF IPAGE = 2 AND LEN(HK$) < 2 THEN _
  2499.          RETURN
  2500.       IF IPAGE = 2 THEN _
  2501.          GOTO 17410
  2502.       B1 = VAL(HK$)
  2503.       IF B1 = 0 AND HK$ <> "0" THEN _
  2504.          GOTO 17410
  2505.       RETURN
  2506. '
  2507. ' *****************************************************************************
  2508. ' * COMMON SUBROUTINE TO DISPLAY OPTION                                       *
  2509. ' *****************************************************************************
  2510. '
  2511. 17500 CALL GETYESNO ("Show section in command prompt",SHOW.SECTION$)
  2512.       RETURN
  2513. 17550 CALL GETYESNO ("Show commands in command prompt",COMMANDS.IN.PROMPT$)
  2514.       RETURN
  2515. 17560 CALL GETYESNO ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS$)
  2516.       RETURN
  2517. 17570 CALL GETYESNO ("Add new users to USERS file",REMEMBER.NEW.USERS$)
  2518.       RETURN
  2519. 17580 CALL GETYESNO ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM$)
  2520.       RETURN
  2521. 17590 CALL GETYESNO ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS$)
  2522.       RETURN
  2523. 17600 CALL GETYESNO ("Enable download of new files at logon",NEW.FILES.CHECK$)
  2524.       RETURN
  2525. 17610 CALL GETYESNO ("Turn printer off after each recycle",TURN.PRINTER.OFF$)
  2526.       RETURN
  2527. '
  2528. ' *****************************************************************************
  2529. ' *  GET REQUIRED QUESTIONNAIRE THAT ALL CALLERS MUST ANSWER ONCE             *
  2530. ' *****************************************************************************
  2531. '
  2532. 17620 CALL GETYESNO ("Play music themes for RBBS functions",MUSIC$)
  2533.       RETURN
  2534. 17630 CALL GETYESNO ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE$)
  2535.       RETURN
  2536. 17640 CALL GETNUMYN ("Use EXTERNAL XMODEM (rather than RBBS's)",USE.EXTERNAL.XMODEM)
  2537.       RETURN
  2538. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2539.       RETURN
  2540. 17700 CALL ASKRO ("Name of questionnaire all callers must answer once",24,_
  2541.                    REQUIRED.QUESTIONNAIRE$)
  2542.       CALL ALLCAPS (REQUIRED.QUESTIONNAIRE$)
  2543.       RETURN
  2544. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2545.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2546. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2547.         BEEP : _
  2548.         GOTO 18000
  2549.       IF START.HASH = 1 THEN _
  2550.         HASH.ID$ = "(NAME)"_
  2551.       ELSE_
  2552.         HASH.ID$ = "(nonstandard)"
  2553.       RETURN
  2554. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2555.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2556. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2557.         INDIV.ID$ = "(none)"_
  2558.       ELSE_
  2559.         INDIV.ID$ = "(nonstandard)"
  2560.       RETURN
  2561. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2562.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2563.           DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2564.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2565.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2566.       RETURN
  2567. 18300 GOSUB 15200
  2568.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2569.       DIR.CATEGORY.FILE$ = TB$ + DIR.CATEGORY.FILE$
  2570.       RETURN
  2571. 18350 CALL ASKRO ("Copy upload description to (Drive/path/name)",24,ALWAYS.STREW.TO$)
  2572.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2573.       RETURN
  2574. 18360 CALL ASKRO ("Restrict 'ALL' to directory named ([ENTER] = unrestriced)",24,MASTER.DIRECTORY.NAME$)
  2575.       RETURN
  2576. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2577.       RETURN
  2578. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2579.       RETURN
  2580. '
  2581. ' *****************************************************************************
  2582. ' *  GET UPLOAD DIRECTORY DRIVE/PATH                                          *
  2583. ' *****************************************************************************
  2584. '
  2585. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2586.       RETURN
  2587. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2588.       RETURN
  2589. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2590.       RETURN
  2591. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2592.       RETURN
  2593. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2594.       RETURN
  2595. '
  2596. ' *****************************************************************************
  2597. ' *  GET UPLOAD DIRECTORY DRIVE/PATH                                          *
  2598. ' *****************************************************************************
  2599. '
  2600. 18550 GOSUB 15200
  2601.       UPLOAD.PATH$ = HJ$
  2602.       RETURN
  2603. 18600 GOSUB 15200
  2604.       DIRECTORY.PATH$ = HJ$
  2605.       RETURN
  2606. 18620 GOSUB 15200
  2607.       PROTOCOL.PATH$ = HJ$
  2608.       IF INSTR(PROTOCOL.PATH$,"\") > 0 THEN _
  2609.          IF RIGHT$(PROTOCOL.PATH$,1) <> "\" THEN _
  2610.             PROTOCOL.PATH$ = PROTOCOL.PATH$ + "\"
  2611.       RETURN
  2612. '
  2613. ' *****************************************************************************
  2614. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE              *
  2615. ' *****************************************************************************
  2616. '
  2617. 18730 HJ$ = "option " + HJ$
  2618.       RETURN
  2619. '
  2620. ' *****************************************************************************
  2621. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE              *
  2622. ' *****************************************************************************
  2623. '
  2624. 19189 IF F = 2 THEN _
  2625.          GOSUB 22560 : _
  2626.          RETURN
  2627.       GOSUB 22100
  2628.       RETURN
  2629. '
  2630. ' *****************************************************************************
  2631. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR*
  2632. ' *****************************************************************************
  2633. '
  2634. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2635.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2636.          RETURN
  2637.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2638.       GOSUB 30610
  2639.       RETURN
  2640. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (128-4096)",128,4096,BUFFER.SIZE)
  2641.       RETURN
  2642. '
  2643. ' *****************************************************************************
  2644. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN                        *
  2645. ' *****************************************************************************
  2646. '
  2647. 21810 CLS
  2648.       LOCATE 3,5
  2649.       PRINT "RBBS-PC is supported in the following:"
  2650.       LOCATE 5,20
  2651.       PRINT "Environment"
  2652.       LOCATE 7,10
  2653.       PRINT "0. Single RBBS-PC in an IBM DOS environment"
  2654.       LOCATE 9,10
  2655.       PRINT "1. MultiLink (multi-tasking under single DOS)
  2656.       LOCATE 11,10
  2657.       PRINT "2. Omninet (CORVUS)"
  2658.       LOCATE 13,10
  2659.       PRINT "3. PC-NET (Orchid)"
  2660.       LOCATE 15,10
  2661.       PRINT "4. DESQview (Quarterdeck)"
  2662.       LOCATE 17,10
  2663.       PRINT "5. 10 NET (Fox Research)"
  2664.       LOCATE 19,10
  2665.       PRINT "6. IBM DOS (3.1 or above) file sharing not supported"
  2666. 21870 GOSUB 50340
  2667.       XX$ = "Select environment (0 to 6, CR to end)"
  2668.       GOSUB 50345
  2669.       LINE INPUT;X$
  2670.       IF X$ = "" THEN _
  2671.          RETURN
  2672.       NETWORK.TYPE = VAL(X$)
  2673.       GOSUB 21890
  2674.       RETURN
  2675. 21890 IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 6 THEN _
  2676.          GOTO 21870
  2677. 21895 IF NETWORK.TYPE = 0 THEN _
  2678.          NETWORK.TYPE$ = "IBM's DOS"
  2679. 21900 IF NETWORK.TYPE = 1 THEN _
  2680.          NETWORK.TYPE$ = "MultiLink"
  2681.       IF NETWORK.TYPE = 2 THEN _
  2682.          NETWORK.TYPE$ = "Omninet"
  2683.       IF NETWORK.TYPE = 3 THEN _
  2684.          NETWORK.TYPE$ = "PC-NET"
  2685.       IF NETWORK.TYPE = 4 THEN _
  2686.          NETWORK.TYPE$ = "DESQview"
  2687.       IF NETWORK.TYPE = 5 THEN _
  2688.          NETWORK.TYPE$ = "10 NET"
  2689.       IF NETWORK.TYPE = 6 THEN _
  2690.          NETWORK.TYPE$ = "IBM's file sharing -- future"
  2691.       IF DONT.ASK THEN _
  2692.          RETURN
  2693.       IF NETWORK.TYPE > 1 AND NETWORK.TYPE < 6 THEN _
  2694.          CALL GETYESNO ("Are you running Multi-Link with " + NETWORK.TYPE$,MLCOM$) : _
  2695.          MLCOM = FALSE : _
  2696.          IF MLCOM$ = "YES" THEN _
  2697.             MLCOM = TRUE
  2698.       RETURN
  2699. '
  2700. ' *****************************************************************************
  2701. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE              *
  2702. ' *****************************************************************************
  2703. '
  2704. 21910 IF F = 2 THEN _
  2705.          GOSUB 22560 : _
  2706.          RETURN
  2707.       GOSUB 22100
  2708.       RETURN
  2709. '
  2710. ' *****************************************************************************
  2711. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF  *
  2712. ' *****************************************************************************
  2713. '
  2714. 21950 GOSUB 50340
  2715.       XX$ = "How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? "
  2716.       GOSUB 50345
  2717.       LINE INPUT;HJ$
  2718.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2719.          GOTO 21950
  2720.       GOSUB 50654
  2721.       IF LEFT$(HJ$,1) = "S" THEN _
  2722.          HJ$ = "SYSTEM" : _
  2723.          RECYCLE.TO.DOS = 1 : _
  2724.          GOTO 22020
  2725.       IF LEFT$(HJ$,1) = "I" THEN _
  2726.          HJ$ = "INTERNAL" : _
  2727.          RECYCLE.TO.DOS = 0 : _
  2728.          GOTO 22020
  2729.       GOTO 21950
  2730. 22020 RECYCLE.TO.DOS$ = HJ$
  2731.       RETURN
  2732. '
  2733. ' *****************************************************************************
  2734. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE *
  2735. ' *****************************************************************************
  2736. '
  2737. 22040 GOSUB 50340
  2738.       XX$ = "Max. records in preformatted " + MAIN.MESSAGE.FILE$ + " file (>" + STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):"
  2739.       GOSUB 50345
  2740.       LINE INPUT;HJ$
  2741.       B3! = VAL(HJ$)
  2742.       IF B3! <= (5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2743.          B3! > 9999999! THEN _
  2744.          GOTO 22040
  2745. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2746.       GOSUB 30610
  2747.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2748.       RETURN
  2749. '
  2750. ' *****************************************************************************
  2751. ' * BUILD THE USERS FILE TO SUIT                                              *
  2752. ' *****************************************************************************
  2753. '
  2754. 22100 GOSUB 50340
  2755.       FF = CURRENT.USER.COUNT
  2756.       IF FF > 1 THEN _
  2757.          FF = FF-1
  2758.       GOSUB 50340
  2759.       XX$ = STR$(FF) + " of" + STR$(HIGHEST.USER.RECORD) + _
  2760.             " records used. Enter new maximum number of records for " + _
  2761.             MAIN.USER.FILE$ + ":"
  2762.       GOSUB 50345
  2763.       LINE INPUT;HJ$
  2764. 22120 B1 = VAL(HJ$)
  2765.       IF B1 < 1 OR B1 > 99999! OR B1 < FF THEN _
  2766.          GOTO 22100
  2767. 22140 B2 = 2
  2768.       WHILE B2 < B1
  2769.         B2 = B2 * 2
  2770.       WEND
  2771.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2772.          RETURN
  2773.       XX$ = "Change " + MAIN.USER.FILE$ + " file to" + STR$(B2) + " records? (YES or NO)"
  2774.       GOSUB 50345
  2775.       GOSUB 22380
  2776.       ON AB GOTO 22100,22150,22100,22100
  2777. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2778.       D.FLAG = -1
  2779.       GOSUB 24110
  2780.       IB = 1
  2781.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2782.       HIGHEST.USER.RECORD = B2
  2783.       GOSUB 30450
  2784.       GOSUB 50340
  2785.       RETURN
  2786. '
  2787. ' *****************************************************************************
  2788. ' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S    *
  2789. ' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION.      *
  2790. ' *****************************************************************************
  2791. '
  2792. 22160 I! = FRE(C$)
  2793.       Y$ = INKEY$
  2794.       IX = 0
  2795.       IF LEN(Y$) < 1 THEN _
  2796.          GOTO 22160
  2797.       IF LEN(Y$) = 2 THEN _               ' IF A FUNCTION KEY, BRANCH
  2798.          GOTO 22240
  2799.       IF ASC(Y$) = 13 THEN _              ' IF A CARRIAGE RETURN, RETURN
  2800.          IX = 22 : _
  2801.          RETURN
  2802.       IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
  2803.          HJ$ = LEFT$(HJ$,LEN(HJ$)-1) : _
  2804.          PRINT CHR$(29) + " " + CHR$(29); : _
  2805.          GOTO 22160
  2806.       IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
  2807.          GOTO 22160
  2808.       PRINT Y$;
  2809.       HJ$ = HJ$ + Y$
  2810.       OPTION$ = HJ$
  2811.       IF LEN(HJ$) > 4 THEN _              ' IF MORE THAN FOUR CHARACTERS,
  2812.          IX = 22                          ' RETURN
  2813.       RETURN
  2814. '
  2815. ' *****************************************************************************
  2816. ' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT    *
  2817. ' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG                               *
  2818. ' *****************************************************************************
  2819. '
  2820. 22240 IX = ASC(RIGHT$(Y$,1))
  2821.       Y$ = "
  2822.       IF IX < 59 OR IX > 91 THEN _        ' IGNORE IF NOT F1 THROUGH F10 OR
  2823.          IX = 0: _                        ' SHIFT-F1 THROUGH SHIFT-F8
  2824.          RETURN
  2825.       IF IX = 73 THEN _                   ' IF PGUP THEN SET IX = 19
  2826.          IX = 19 : _
  2827.          RETURN
  2828.       IF IX = 79 THEN _                   ' IF END THEN SET IX = 21
  2829.          IX = 21 : _
  2830.          RETURN
  2831.       IF IX = 81 THEN _                   ' IF PGDN THEN SET IX = 20
  2832.          IX = 20 : _
  2833.          RETURN
  2834.       IF (IX-58) < 11 THEN _              ' IF F1 THROUGH F10 SET IX = 1
  2835.          IX = IX-58 : _                   ' THROUGH 10 ACCORDINGLY.
  2836.          RETURN
  2837.       IF (IX-73) > 10 AND _               ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
  2838.          (IX-73) < 19 THEN _              ' SET IX = 11 THROUGH 18
  2839.             IX = IX - 73 : _              ' ACCORDINGLY.
  2840.             RETURN
  2841.       IX = 0
  2842.       RETURN
  2843. '
  2844. ' *****************************************************************************
  2845. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA                       *
  2846. ' *****************************************************************************
  2847. '
  2848. 22340 LOCATE 22,1
  2849.       PRINT SPACE$(79);
  2850.       LOCATE 22,15
  2851.       PRINT SPC(64);
  2852.       LOCATE 22,15
  2853.       PRINT TIME$;" ";
  2854.       COLOR 0,7
  2855.       PRINT " Reading Data, Wait a sec !!! ";
  2856.       COLOR FG,BG,BORDER
  2857.       RETURN
  2858. '
  2859. ' *****************************************************************************
  2860. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT     *
  2861. ' *****************************************************************************
  2862. '
  2863. 22350 GOSUB 50340
  2864.       XX$ = "Are you satisfied with all changes ? (Y/N) or <Q>uit "
  2865.       GOSUB 50345
  2866.       GOSUB 22380
  2867.       ON AB GOTO 12190,59000,60360,22350
  2868. 22380 LINE INPUT;HJ$
  2869.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2870.          GOTO 22470
  2871.       GOSUB 50654
  2872.       IF HJ$ = "NO" THEN _
  2873.          AB = 1 : _
  2874.          RETURN
  2875.       IF HJ$ = "N" THEN _
  2876.          HJ$ = "NO" : _
  2877.          AB = 1 : _
  2878.          RETURN
  2879.       IF HJ$ = "YES"  THEN _
  2880.          AB = 2 : _
  2881.          RETURN
  2882.       IF HJ$ = "Y" THEN _
  2883.          HJ$ = "YES" : _
  2884.          AB = 2 : _
  2885.          RETURN
  2886.       IF HJ$ = "QUIT" THEN _
  2887.          AB = 3 : _
  2888.          RETURN
  2889.       IF HJ$ = "Q" THEN _
  2890.          AB = 3 : _
  2891.          RETURN
  2892. 22470 AB = 4
  2893.       RETURN
  2894. '
  2895. ' *****************************************************************************
  2896. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH                *
  2897. ' *****************************************************************************
  2898. '
  2899. 22480 GOSUB 50340
  2900.       XX$ = "To which copy of RBBS-PC will these options apply (1 to 36)?"
  2901.       GOSUB 50345
  2902.       LINE INPUT;HJ$
  2903.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 2  THEN _
  2904.          GOTO 22480
  2905.       IF VAL(HJ$) < 1 OR VAL(HJ$) > 36 THEN _
  2906.          GOTO 22480
  2907.       MID$(CONFIG.FILENAME$,5,1) = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2908.       RETURN
  2909. '
  2910. ' *****************************************************************************
  2911. ' * NOTIFY SYSOP OPTIONS THAT ARE UNAVAILABLE                                 *
  2912. ' *****************************************************************************
  2913. '
  2914. 22550 GOSUB 50340
  2915.       XX$ = "Option " + _
  2916.             OPTION$ + _
  2917.             " unavailable with CONFIG " + CONFIG.VERSION$ +"!"
  2918.       GOSUB 50345
  2919.       DELAY! = FNTI! + 5
  2920.       GOSUB 60440
  2921.       RETURN
  2922. '
  2923. ' *****************************************************************************
  2924. ' * NOTIFY SYSOP OPTIONS THAT ARE UNAVAILABLE FOR PUBLIC CONFERENCES          *
  2925. ' *****************************************************************************
  2926. '
  2927. 22560 GOSUB 50340
  2928.       XX$ = "Option " + _
  2929.             OPTION$ + _
  2930.             " unavailable when maintaining a public conference!"
  2931.       GOSUB 50345
  2932.       DELAY! = FNTI! + 5
  2933.       GOSUB 60440
  2934.       RETURN
  2935. '
  2936. ' *****************************************************************************
  2937. ' * REBUILD THE USER FILE                                                     *
  2938. ' *****************************************************************************
  2939. '
  2940. 22570 IF F = 2 THEN _
  2941.          GOSUB 22560 : _
  2942.          RETURN
  2943.       D.FLAG = 0
  2944.       GOSUB 24110
  2945.       RETURN
  2946. '
  2947. ' *****************************************************************************
  2948. ' * PACK THE MESSAGES FILE                                                    *
  2949. ' *****************************************************************************
  2950. '
  2951. 23160 B1 = MAXIMUM.NUMBER.OF.NODES
  2952.       B3! = HIGHEST.MESSAGE.RECORD
  2953.       PURGE = -1
  2954.       GOSUB 30610
  2955.       RETURN
  2956. '
  2957. ' *****************************************************************************
  2958. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE                      *
  2959. ' *****************************************************************************
  2960. '
  2961. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,118,6)) - 1
  2962.       RETURN
  2963. '
  2964. ' *****************************************************************************
  2965. ' * REPAIR THE MESSAGES FILE                                                  *
  2966. ' *****************************************************************************
  2967. '
  2968. 23620 RB = 1
  2969. '
  2970. ' *****************************************************************************
  2971. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE                             *
  2972. ' *****************************************************************************
  2973. '
  2974. 23630 SK = 0
  2975.       GOSUB 30040              ' <----Print message headers
  2976.       OPEN "R",1,MAIN.MESSAGE.FILE$
  2977.       FIELD 1,128 AS MESSAGE.RECORD$
  2978.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
  2979.         GET 1,I
  2980.         IF VAL(MID$(MESSAGE.RECORD$,117,6)) > 0 AND _
  2981.            SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2982.            SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2983.            GOSUB 23610 ELSE _
  2984.         GOTO 23725
  2985.         I$ = "K"
  2986.         IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2987.            I$ = "A
  2988.         IF LOC(1) > NEXT.MESSAGE.RECORD-1 THEN _
  2989.            GOTO 23730
  2990.         PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  2991.               MID$(MESSAGE.RECORD$,76,25) + " " + _
  2992.               MID$(MESSAGE.RECORD$,101,15) + " " + _
  2993.               I$ + " " + _
  2994.               MID$(MESSAGE.RECORD$,117,6) + " " + _
  2995.               STR$(LOC(1)) + " "  + _
  2996.               STR$(I)
  2997.         SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  2998.         IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  2999.            GOTO 23730
  3000.         IF RB THEN _
  3001.            GOSUB 50580
  3002. 23725 NEXT
  3003. 23730 GET 1,1
  3004.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  3005.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  3006.       PUT 1,1
  3007.       CLOSE 1
  3008.       DELAY! = FNTI! + 5
  3009.       GOSUB 60440
  3010.       RETURN
  3011. '
  3012. ' *****************************************************************************
  3013. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE                     *
  3014. ' *****************************************************************************
  3015. '
  3016. 23731 LOCATE 25,5
  3017.       PRINT "Setting Hayes 2400 firmware switches for RBBS-PC on " + COM.PORT$;
  3018.       DELAY! = FNTI! + 3
  3019.       GOSUB 60440
  3020. '
  3021. ' *****************************************************************************
  3022. ' *                                                                           *
  3023. ' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:      *
  3024. ' *                                                                           *
  3025. ' *           &C1       = Indicate carrier detect if user is on-line          *
  3026. ' *           &D3       = Use these settings when DTR drops                   *
  3027. ' *           B1        = Use Bell 212A when 1200 Baud is detected            *
  3028. ' *           E0        = Do not echo modem commands back to the PC           *
  3029. ' *           V1        = Issue long form of results codes                    *
  3030. ' *           M0        = Disable the speaker                                 *
  3031. ' *                                                                           *
  3032. ' *****************************************************************************
  3033. '
  3034. 23732 A$ = USER.INITIALIZE.COMMAND$
  3035.       IF VAL(MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,3)) = 255 THEN _
  3036.          A$ = A$ + "Q1"  ' Don't send results to the PC
  3037. 23734 OPEN COM.PORT$ + ":2400,N,8,1,RS,CD,DS" AS #3
  3038.       PRINT #3,USER.FIRMWARE.CLEAR.CMND$ 'Clear and initialize to factory settings
  3039.       DELAY! = FNTI! + 3
  3040.       GOSUB 60440
  3041.       PRINT #3,A$ + USER.FIRMWARE.WRITE.CMND$
  3042.       GOSUB 60440
  3043. 23739 CLOSE #3
  3044.       LOCATE 25,5
  3045.       PRINT SPACE$(74);
  3046.       LOCATE 25,5
  3047.       PRINT "Modem's firmware set as specified in parameter 205 for "+M13$;
  3048.       IA!=FNTI!+3
  3049.       GOSUB 60440
  3050.       RETURN
  3051. '
  3052. ' *****************************************************************************
  3053. ' * ROUTINE TO RENUMBER THE MESSAGE FILE                                      *
  3054. ' *****************************************************************************
  3055. '
  3056. 23740 GOSUB 30040
  3057. 23750 GOSUB 50340
  3058.       XX$ = "Renumber starting with OLD message # (<" + STR$(CALLS.TODATE! + 1) + ")"
  3059.       GOSUB 50345
  3060.       LINE INPUT;HJ$
  3061.       IF HJ$ = "" THEN _
  3062.          RETURN
  3063.       B1 = VAL(HJ$)
  3064.       IF B1 < 1 OR B1 > CALLS.TODATE! THEN _
  3065.          GOTO 23750
  3066.       RE = B1
  3067. 23810 GOSUB 50340
  3068.       XX$ = "Renumber starting with NEW message # "
  3069.       GOSUB 50345
  3070.       LINE INPUT;HJ$
  3071.       IF HJ$ = "" THEN _
  3072.          RETURN
  3073.       B1 = VAL(HJ$)
  3074.       IF B1 < 1 OR B1 > 9999 THEN _
  3075.          GOTO 23810
  3076.       NE = B1-1
  3077.       OPEN "R",1,MAIN.MESSAGE.FILE$
  3078.       FIELD 1,128 AS MESSAGE.RECORD$
  3079.       GOSUB 50340
  3080.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
  3081.         GET 1,I
  3082.         IF INSTR(MESSAGE.RECORD$,CHR$(225)) OR _
  3083.            INSTR(MESSAGE.RECORD$,CHR$(226)) THEN _
  3084.            GOSUB 24010 : _
  3085.            GOSUB 23610
  3086.       NEXT
  3087.       GET 1,1
  3088.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  3089.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  3090.       PUT 1,1
  3091.       CLOSE 1
  3092.       DELAY! = FNTI! + 1
  3093.       GOSUB 60440
  3094.       RETURN
  3095. 24010 LOCATE 24,15
  3096.       PRINT "Msg #" + MID$(MESSAGE.RECORD$,1,5);
  3097.       IF VAL(MID$(MESSAGE.RECORD$,2,4))<RE THEN _
  3098.          PRINT " read"; : _
  3099.          RETURN
  3100.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  3101.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  3102.       NE = NE + 1
  3103.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  3104.       MID$(MESSAGE.RECORD$,1,1) = Y$
  3105.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  3106.       PUT 1,I
  3107.       RETURN
  3108. '
  3109. ' *****************************************************************************
  3110. ' * ROUTINE TO PACK THE USERS FILE                                            *
  3111. ' *****************************************************************************
  3112. '
  3113. 24020 OPEN "R",1,MAIN.USER.FILE$,128
  3114.       FIELD 1,  31 AS USER.NAME$, _
  3115.                 15 AS PASSWORD$, _
  3116.                  2 AS SECURITY.LEVEL$, _
  3117.                 14 AS USER.OPTIONS$, _
  3118.                 24 AS CITY.STATE$, _
  3119.                 19 AS MACHINE.TYPE$, _
  3120.                 14 AS LAST.DATE.TIME.ON$, _
  3121.                  3 AS LIST.NEW.DATE$, _
  3122.                  2 AS USER.DOWNLOADS$, _
  3123.                  2 AS USER.UPLOADS$, _
  3124.                  2 AS ELASPED.TIME$
  3125.       FIELD 1, 128 AS USER.RECORD$
  3126.       RETURN
  3127. '
  3128. ' *****************************************************************************
  3129. ' *  SHARED ROUTINE TO SET UP USER PROCESSING                                 *
  3130. ' *****************************************************************************
  3131. '
  3132. 24025 IF LEN.HASH < 7 THEN NU = LEN.HASH ELSE NU = 7
  3133.       NEW.USER$ = LEFT$("NEWUSER",NU)
  3134.       EMPTY.USER$ = SPACE$(NU)
  3135.       DELETED.USER$ = LEFT$("deleted user",NU)
  3136.       COMP.USER$ = EMPTY.USER$
  3137.       RETURN
  3138. '
  3139. ' *****************************************************************************
  3140. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT        *
  3141. ' *****************************************************************************
  3142. '
  3143. 24050 GOSUB 24020
  3144.       GOSUB 24025
  3145.       A! = HIGHEST.USER.RECORD
  3146.       XX$ = "Processing Record #"
  3147.       GOSUB 50345
  3148.       X = POS(0)+1
  3149.       FOR J=1 TO A!
  3150.         GET 1,J
  3151.         LOCATE 24,X
  3152.         PRINT J;
  3153. 24051   HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  3154.         LSET COMP.USER$ = HASH.VALUE$
  3155. 24052   IF ASC(HASH.VALUE$) = 0 OR _
  3156.            COMP.USER$ = NEW.USER$ OR _
  3157.            COMP.USER$ = EMPTY.USER$ OR _
  3158.            COMP.USER$ = DELETED.USER$ THEN _
  3159.              GOTO 24055
  3160.         USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  3161.         USER.OPTIONS = USER.OPTIONS AND 255      'Zero out only flag 6
  3162.         MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  3163.         PUT 1,J
  3164. 24055 NEXT
  3165.       CLOSE 1
  3166.       RETURN
  3167. 24110 GOSUB 30040
  3168.       GOSUB 24020
  3169.       GOSUB 50350
  3170.       A$ = F$
  3171.       GOSUB 50095
  3172.       OPEN "R",2,A$,128
  3173.       FIELD 2,  31 AS USER.NAME.N$, _
  3174.                 15 AS PASSWORD.N$, _
  3175.                  2 AS SECURITY.LEVEL.N$, _
  3176.                 14 AS USER.OPTIONS.N$, _
  3177.                 24 AS CITY.STATE.N$, _
  3178.                 19 AS MACHINE.TYPE.N$, _
  3179.                 14 AS LAST.DATE.TIME.ON.N$, _
  3180.                  3 AS LIST.NEW.DATE.N$, _
  3181.                  2 AS USER.DOWN.LOADS.N$, _
  3182.                  2 AS USER.UPLOADS.N$, _
  3183.                  2 AS ELAPSED.TIME.N$
  3184.       FIELD 2, 128 AS USER.RECORD.N$
  3185.       CURRENT.MONTH = VAL(LEFT$(DATE$,2))
  3186.       GOSUB 50340
  3187.       A! = 0
  3188.       GOSUB 50840
  3189.       A! = HIGHEST.USER.RECORD
  3190.       CURRENT.USER.COUNT = 1
  3191.       GOSUB 24025
  3192. 24112 FOR J  =  1 TO A!
  3193.         GET 1
  3194. 24114   HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  3195.         LSET COMP.USER$ = HASH.VALUE$
  3196.         IF ASC(HASH.VALUE$) = 0 OR _
  3197.            COMP.USER$ = NEW.USER$ OR _
  3198.            COMP.USER$ = EMPTY.USER$ OR _
  3199.            COMP.USER$ = DELETED.USER$ THEN _
  3200.            A$ = "" : _
  3201.            GOTO 24430
  3202.         IF D.FLAG THEN _
  3203.            GOTO 24290
  3204.         SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  3205.         IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  3206.            GOTO 24290                           ' copy users exempt from purges
  3207.         IF SECURITY.LEVEL <= MINIMUM.LOGON.SECURITY THEN _
  3208.            GOTO 24290                                 ' copy "locked-out" users
  3209. 24116   MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2))
  3210.         MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH-MONTH.OF.LAST.LOGON
  3211.         IF MONTHS.SINCE.LAST.LOGON < 0 THEN _
  3212.            MONTHS.SINCE.LAST.LOGON = MONTHS.SINCE.LAST.LOGON + 12
  3213.         IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  3214.            A$ = "(Last on " + LAST.DATE.TIME.ON$ + ")" : _           '
  3215.            GOTO 24430                                     'Purge inactive users
  3216. 24290   PRINT STR$(LOC(1)) + ": " + HASH.VALUE$ + " copied .... ";
  3217.         GOSUB 50720
  3218.         GOTO 24450
  3219. 24430   PRINT STR$(LOC(1)) + ": " + HASH.VALUE$ + "        purged... " + A$
  3220. 24450 NEXT
  3221.       CLOSE 1,2
  3222.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  3223.       GOSUB 30450
  3224. 24730 XX$ = "Delete the old " + MAIN.USER.FILE$ + " file? (YES or NO)?"
  3225.       GOSUB 50345
  3226.       GOSUB 22380
  3227.       ON AB GOTO 24750,24770,24730,24730
  3228. 24750 A$ = MAIN.USER.FILE$
  3229.       GOSUB 50096
  3230.       NAME MAIN.USER.FILE$ AS A$
  3231.       GOTO 24780
  3232. 24770 KILL MAIN.USER.FILE$
  3233. 24780 GOSUB 50350
  3234.       A$ = F$
  3235.       GOSUB 50095
  3236.       NAME A$ AS MAIN.USER.FILE$
  3237.       RETURN
  3238. ' *****************************************************************************
  3239. ' *            CHECK VALIDITY OF FMS DIRECTORY                                *
  3240. ' *****************************************************************************
  3241. 24790 CALL CHKFMSDIR (DIRECTORY.PATH$+FMS.DIRECTORY$+"."+DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  3242.       RETURN
  3243. '
  3244. ' *****************************************************************************
  3245. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS                  *
  3246. ' *****************************************************************************
  3247. '
  3248. 24800 CLS
  3249.       I! = FRE(C$)
  3250.       COLOR 0,7,0
  3251.       LOCATE 1,10
  3252.       PRINT "RBBS-PC CPC15.1 Default Configuration " + CONFIG.VERSION$;
  3253.       IF F THEN _
  3254.          GOSUB 24970
  3255.       COLOR FG,BG,BORDER
  3256.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  3257.       RETURN
  3258. 24890 A$ = "Enter parameter number to change, END to update, PgUp/PgDn to scroll.
  3259. 24900 LOCATE 24,1
  3260.       PRINT A$;
  3261.       PRINT STRING$((79-LEN(A$)),32);
  3262.       LOCATE 24,LEN(A$) + 1
  3263.       COLOR FG,BG,BORDER
  3264.       HJ$ = "
  3265.       I! = FRE(C$)
  3266.       RETURN
  3267. '
  3268. ' *****************************************************************************
  3269. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS       *
  3270. ' *****************************************************************************
  3271. '
  3272. 24970 LOCATE 2,1
  3273.       PRINT SPACE$(10)
  3274.       LOCATE 2,10
  3275.       A$ = "Private"
  3276.       IF F = 2 THEN _
  3277.          A$ = "Public"
  3278.       COLOR 31,0,0
  3279.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  3280.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF")-1) + _
  3281.             ")";
  3282.       RETURN
  3283. '
  3284. ' *****************************************************************************
  3285. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES          *
  3286. ' *****************************************************************************
  3287. '
  3288. 25020 XX$ = "In file " + MAIN.USER.FILE$ + " " + A$ + " record"
  3289.       GOSUB 50345
  3290.       X = POS(0)+1
  3291.       RETURN
  3292. 25030 IF PURGE THEN _
  3293.          RETURN
  3294.       XX$ = A$ + " file " + MAIN.MESSAGE.FILE$ + " record"
  3295.       GOSUB 50345
  3296.       X = 5 + LEN(XX$)
  3297.       RETURN
  3298. '
  3299. ' *****************************************************************************
  3300. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE          *
  3301. ' *****************************************************************************
  3302. '
  3303. 25040 GOSUB 50340
  3304.       REFRESH = 0
  3305.       IF F = 0 THEN _
  3306.          GOTO 25050
  3307.       XX$ = "End conference maintenance? (YES or NO)"
  3308.       GOSUB 50345
  3309.       GOSUB 22380
  3310.       ON AB GOTO 25050,25044,25142,25142
  3311. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3312.       MAIN.USER.FILE$ = MAINUSR$
  3313.       REFRESH = 1
  3314.       RETURN
  3315. 25050 XX$ = "Enter the name of the conference (seven characters or less) "
  3316.       GOSUB 50345
  3317.       LINE INPUT;HJ$
  3318.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3319.          GOTO 25040
  3320.       GOSUB 50654
  3321.       CP$ = HJ$
  3322. 25080 GOSUB 50340
  3323. 25090 XX$ = "Specify drive (A->" + M$ + ") containing this conference's files. "
  3324.       GOSUB 50345
  3325.       LINE INPUT;HJ$
  3326.       IF LEN(HJ$) <> 1 THEN _
  3327.          GOTO 25080
  3328.       GOSUB 50654
  3329.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  3330.          GOTO 25090
  3331.       CP$ = HJ$ + ":" + CP$
  3332.       MAIN.MESSAGE.FILE$ = CP$ + "M.DEF
  3333. 25141 GOSUB 50340
  3334. 25142 XX$ = "Is this a private conference? (YES or NO)"
  3335.       GOSUB 50345
  3336.       GOSUB 22380
  3337.       ON AB GOTO 25144,25160,25141,25141
  3338. 25144 F = 2
  3339.       GOTO 25170
  3340. 25160 F = 1
  3341.       UG = 0
  3342.       MAIN.USER.FILE$ = CP$ + "U.DEF"
  3343. 25170 REFRESH = 2
  3344.       RETURN
  3345. '
  3346. ' *****************************************************************************
  3347. ' * COMMON ROUTINE TO DISPLAY SUBSYSTEM COMMANDS AND THEIR SECURITY LEVELS    *
  3348. ' *****************************************************************************
  3349. '
  3350. 25180 CLS
  3351.       I! = FRE(C$)
  3352.       COLOR 0,7,0
  3353.       LOCATE 1,23
  3354.       PRINT "RBBS-PC CPC15.1 Default Configuration";
  3355.       COLOR FG,BG,BORDER
  3356.       LOCATE  2,5
  3357.       PRINT "The RBBS-PC " + CO$ + " Commands are as follows:
  3358.       LOCATE   3,10
  3359.       XX$ = "Command             Security"
  3360.       IF IPAGE = 2 THEN _
  3361.          XX$ = "Description         Command"
  3362.       PRINT XX$
  3363.       RETURN
  3364. '
  3365. ' *****************************************************************************
  3366. ' * COMMON ROUTINE TO ASK FOR FIRST CHARACTER OF A COMMAND                    *
  3367. ' *****************************************************************************
  3368. '
  3369. 25210 XX$ = "Enter first character of command (CR to end)"
  3370.       GOSUB 50345
  3371.       LINE INPUT;X$
  3372.       RETURN
  3373. '
  3374. ' *****************************************************************************
  3375. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES                   *
  3376. ' *****************************************************************************
  3377. '
  3378. 25380 XX$ = "Will you be using DOS sub-directories? (YES or NO) "
  3379.       GOSUB 50345
  3380.       GOSUB 22380
  3381.       ON AB GOTO 25400,25410,25380,25380
  3382. 25400 WILL.SUBDIRS.B.USED$ = "NO"
  3383.       UPLOAD.TO.SUBDIR$ = WILL.SUBDIRS.B.USED$
  3384.       DOWNLOAD.TO.SUBDIR$ = WILL.SUBDIRS.B.USED$
  3385.       RETURN
  3386. 25410 WILL.SUBDIRS.B.USED$ = "YES"
  3387.       RETURN
  3388. '
  3389. ' *****************************************************************************
  3390. ' * SET UP FOR UPLOADING TO A DOS SUB-DIRECTORY?                              *
  3391. ' *****************************************************************************
  3392. '
  3393. 25420 XX$ = "Are uploads to a DOS sub-directory? (YES or NO) "
  3394.       GOSUB 50345
  3395.       GOSUB 22380
  3396.       ON AB GOTO 25440,25450,25420,25420
  3397. 25440 UPLOAD.TO.SUBDIR$ = "NO"
  3398.       RETURN
  3399. 25450 UPLOAD.TO.SUBDIR$ = "YES"
  3400.       RETURN
  3401. '
  3402. ' *****************************************************************************
  3403. ' * SHOULD RBBS-PC SET UP TO HAVE DOWNLOADS COME FROM DOS SUB-DIRECTORIES     *
  3404. ' *****************************************************************************
  3405. '
  3406. 25460 XX$ = "Are downloads from DOS sub-directories? (YES or NO) "
  3407.       GOSUB 50345
  3408.       GOSUB 22380
  3409.       ON AB GOTO 25480,25490,25460,25460
  3410. 25480 DOWNLOAD.TO.SUBDIR$ = "NO"
  3411.       RETURN
  3412. 25490 DOWNLOAD.TO.SUBDIR$ = "YES"
  3413.       RETURN
  3414. '
  3415. ' *****************************************************************************
  3416. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF   *
  3417. ' *****************************************************************************
  3418. '
  3419. 25495 IF UPLOAD.TO.SUBDIR$ = "NO" THEN _
  3420.          GOTO 25497
  3421.       GOSUB 31060
  3422.       A$ = "upload"
  3423.       PRINT "Change " + A$ +" DOS sub-directory? (YES or NO) ";
  3424.       GOSUB 22380
  3425.       ON AB GOTO 25497,25500,25495,25495
  3426. 25497 IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
  3427.          RETURN
  3428.       GOSUB 31060
  3429.       A$ = "download"
  3430.       PRINT "Modify " + A$ + _
  3431.             " DOS sub-directories? (YES or NO) ";
  3432.       GOSUB 22380
  3433.       ON AB GOTO 25498,25505,25497,25497
  3434. 25498 RETURN
  3435. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3436.          GOTO 25502
  3437. 25501 LOCATE 23,5
  3438.       PRINT SPC(74)
  3439.       LOCATE 23,5
  3440.       PRINT "Current " + A$" DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3441. 25502 GOSUB 25850
  3442.       IF LEN(HJ$) < 1 THEN _
  3443.          GOTO 25505
  3444.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3445.          SWAP UPLOAD.SUBDIR$,X$ : _
  3446.          IF X$ = "" THEN _
  3447.             GOTO 25501 _
  3448.          ELSE 25505
  3449.       GOTO 25502
  3450. 25505 IF A$="upload" THEN _
  3451.          GOTO 25497
  3452.       IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
  3453.          RETURN
  3454.       LOCATE 23,5
  3455.       PRINT SPC(74)
  3456.       LOCATE 23,5
  3457.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3458. 25510 GOSUB 31060
  3459.       PRINT "L>ist, C>hange, A>dd, D>elete " + A$" DOS sub-directories? (CR ends) ";
  3460.       LINE INPUT;HJ$:
  3461.       GOSUB 50654
  3462.       IF LEN(HJ$) <  1 GOTO 25498
  3463.       IF LEN(HJ$) <> 1 GOTO 25505
  3464.       FF = INSTR("LCAD",HJ$)
  3465.       IF FF = 0 THEN _
  3466.          GOTO 25510
  3467.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3468.          GOTO 25510
  3469.       ON FF GOSUB 25610,25670,25730,25670
  3470.       GOTO 25505
  3471. 25610 LAST = (DNLD.SUB/16) + 1
  3472.       INCR = 1
  3473.       FOR IX = 1 TO LAST
  3474.       GOSUB 24800
  3475.       LOCATE 4,1
  3476.       PRINT "DOS sub-directories from which downloads are done:";
  3477.       INDEX = 4
  3478.       FOR I = 1 TO 16
  3479.       LOCATE INDEX + I,1
  3480.       PRINT DNLD$(INCR);
  3481.       INCR = INCR + 1
  3482.       IF INCR > DNLD.SUB GOTO 25668
  3483.       NEXT
  3484. 25636 XX$ = "More (YES or NO)"
  3485.       GOSUB 50345
  3486.       GOSUB 22380
  3487.       ON AB GOTO 25668,25644,25636,25636
  3488. 25644 NEXT
  3489. 25668 RETURN
  3490. 25670 GOSUB 25850
  3491.       IF LEN(HJ$) < 1 THEN _
  3492.          RETURN
  3493.       GOSUB 26030
  3494.       A$ = " not found!"
  3495.       IF X$ = "" THEN _
  3496.          GOTO 25682
  3497.       FOR I = 1 TO DNLD.SUB
  3498.           IF X$ = DNLD$(I) THEN _
  3499.              GOTO 25698
  3500.       NEXT
  3501. 25682 GOSUB 31060
  3502.       PRINT X$ + A$;
  3503.       A$ = "download"
  3504.       DELAY! = FNTI! + 5
  3505.       GOSUB 60440
  3506.       RETURN
  3507. 25698 IF FF = 4 THEN _
  3508.          FOR X = I TO DNLD.SUB : _
  3509.              DNLD$(X) = DNLD$(X + 1) : _
  3510.          NEXT : _
  3511.          A$ = " deleted!" : _
  3512.          DNLD.SUB = DNLD.SUB-1 : _
  3513.          GOTO 25682
  3514.       IF FF = 2 THEN _
  3515.          A$ = "download" : _
  3516.          NEXT.MESSAGE.RECORD = I : _
  3517.          GOSUB 25850 : _
  3518.          GOSUB 26030 : _
  3519.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3520.          A$ = " changed!" : _
  3521.          GOTO 25682
  3522. 25730 X$ = ""
  3523.       GOSUB 25850
  3524.       IF LEN(HJ$) < 1 THEN _
  3525.          RETURN
  3526.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3527.           IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3528.              GOTO 25735
  3529.       NEXT
  3530.       GOSUB 60380
  3531.       GOSUB 31060
  3532.       PRINT X$ + " is not on a drive eligible for downloading.";
  3533.       DELAY! = FNTI! + 5
  3534.       GOSUB 60440
  3535.       GOTO 25730
  3536. 25735 IF X$ = "" THEN _
  3537.          GOTO 25498
  3538.       DNLD.SUB = DNLD.SUB + 1
  3539.       DNLD$(DNLD.SUB) = X$
  3540.       RETURN
  3541. '
  3542. ' *****************************************************************************
  3543. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY                   *
  3544. ' *****************************************************************************
  3545. '
  3546. 25850 GOSUB 31060
  3547.       PRINT "Enter " + A$" DOS sub-directory name (CR to end). ";
  3548.       LINE INPUT;HJ$
  3549.       GOSUB 50654
  3550.       IF LEN(HJ$) < 1 THEN _
  3551.          RETURN
  3552.       IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
  3553.          X$ = HJ$ : _
  3554.          RETURN
  3555.       IF INSTR(HJ$,":\") <> 2 THEN _
  3556.          GOTO 25850
  3557.       X$ = HJ$
  3558.       FOR I = 4 TO LEN(X$)
  3559.         Y = INSTR(I,X$,"\")
  3560.         IF Y = 0 THEN _
  3561.            L1 = LEN(X$)-I + 1 : _
  3562.            GOTO 25876
  3563.         IF Y<>0 THEN _
  3564.            L1 = Y-I + 1 : _
  3565.            GOTO 25876
  3566.       NEXT
  3567. 25876 HJ$ = MID$(X$,I,L1)
  3568.       IF LEN(HJ$) > 12 THEN _
  3569.          GOTO 25850
  3570.       L1 = INSTR(HJ$,".")
  3571.       IF L1 = 0 THEN _
  3572.          IF LEN(HJ$) < 9 THEN _
  3573.             GOTO 25920 _
  3574.          ELSE GOTO 25850
  3575.       IF L1 > 9 THEN _
  3576.          GOTO 25850
  3577.       IF L1 < 2 THEN _
  3578.          GOTO 25850
  3579.       IF LEN(HJ$)-L1 > 3 THEN _
  3580.          GOTO 25850
  3581.       I = 0
  3582.       GOSUB 25920
  3583.       IF I = 0 THEN _
  3584.          RETURN
  3585.       GOTO 25850
  3586. 25920 FOR J = 1 TO LEN(HJ$)
  3587.         X = ASC(MID$(HJ$,J,1))
  3588.         IF (X > 63 AND X < 91) THEN _
  3589.            GOTO 26020
  3590.         IF (X > 47 AND X < 58) THEN _
  3591.            GOTO 26020
  3592.         IF (X = 33) THEN _
  3593.            GOTO 26020
  3594.         IF (X > 34 AND X < 42) THEN _
  3595.            GOTO 26020
  3596.         IF (X > 43 AND X < 47) THEN _
  3597.            GOTO 26020
  3598.         IF (X > 96 AND X < 124) THEN _
  3599.            GOTO 26020
  3600.         IF (X = 125) THEN _
  3601.            GOTO 26020
  3602.         I = 1
  3603.         RETURN
  3604. 26020 NEXT
  3605.       RETURN
  3606. '
  3607. ' *****************************************************************************
  3608. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING                *
  3609. ' *****************************************************************************
  3610. '
  3611. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3612.         IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3613.            RETURN
  3614.       NEXT
  3615.       X$ = ""
  3616.       RETURN
  3617. '
  3618. ' *****************************************************************************
  3619. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS  *
  3620. ' *****************************************************************************
  3621. '
  3622. 26040 XX$ = "Is RBBS-PC to drop to DOS at a specific time each day? (YES or NO)"
  3623.       GOSUB 50345
  3624.       GOSUB 22380
  3625.       ON AB GOTO 26050,26060,26050,26060
  3626. 26050 RETURN
  3627. 26060 XX$ = "Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No) "
  3628.       GOSUB 50345
  3629.       LINE INPUT;HJ$
  3630.       IF HJ$ = "" THEN _
  3631.          TIME.TO.DROP.TO.DOS = -1 : _
  3632.          RETURN
  3633.       IF LEN(HJ$) <> 4 THEN _
  3634.          GOTO 26060
  3635.       IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
  3636.          FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
  3637.          FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
  3638.          FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
  3639.          GOTO 26040
  3640.       TIME.TO.DROP.TO.DOS = VAL(HJ$)
  3641.       RETURN
  3642. '
  3643. ' *****************************************************************************
  3644. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)                          *
  3645. ' *****************************************************************************
  3646. '
  3647. 30000 OKAY = 0                      ' <---- check to see if file exists
  3648. 30010 NAME FILE$ AS FILE$           '   OKAY = 0 means file not found
  3649. 30020 OKAY = -1                     '   OKAY = 1 means file exists
  3650. 30030 RETURN
  3651. '
  3652. ' *****************************************************************************
  3653. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD           *
  3654. ' *****************************************************************************
  3655. '
  3656. 30040 OPEN "R",2,MAIN.MESSAGE.FILE$,128        ' <---- read MESSAGES checkpoint record
  3657.       FIELD 2,128 AS RR$
  3658.       GET 2,1
  3659.       CALLS.TODATE!          = VAL(MID$(RR$,1,8))     '  1-  8  =  number of last message on system
  3660.       FIRST.USER.RECORD      = VAL(MID$(RR$,52,5))    ' 52- 56  =  first rec. of user file
  3661.       CURRENT.USER.COUNT     = VAL(MID$(RR$,57,5))    ' 57- 61  =  next avail. user record
  3662.       HIGHEST.USER.RECORD    = VAL(MID$(RR$,62,5))    ' 62- 66  =  last rec. of user file
  3663.       FIRST.MESSAGE.RECORD   = VAL(MID$(RR$,68,7))    ' 68- 74 = first rec. of msgs file
  3664.       NEXT.MESSAGE.RECORD    = VAL(MID$(RR$,75,7))    ' 75- 81 = next avail. msgs record
  3665.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))    ' 82- 88 = last rec. of msgs file
  3666.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))    ' 89- 95 = maximum number of messages
  3667.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2))   '127-128 = maximum number of "nodes"
  3668.       CLOSE 2
  3669.       RETURN
  3670. '
  3671. ' *****************************************************************************
  3672. ' * COMMON ROUTINE TO GET THE LENGTH OF A FILE                                *
  3673. ' *****************************************************************************
  3674. '
  3675. 30180 OPEN "R",2,FILE$,128      ' <---- get length of file
  3676.       FIELD 2,128 AS RR$
  3677.       UG = LOF(2)/128
  3678.       CLOSE 2
  3679.       RETURN
  3680. '
  3681. ' *****************************************************************************
  3682. ' * COMMON SUBROUTINE TO CREATE A NEW MESSAGES FILE                           *
  3683. ' *****************************************************************************
  3684. '
  3685. 30230 OPEN "R",2,MAIN.MESSAGE.FILE$            ' <---- create new MESSAGES file
  3686.       FIELD 2,128 AS RR$
  3687.       A$ = "Creating preformatted"
  3688.       LSET RR$ = " 1" + SPACE$(124) + STR$(MAXIMUM.NUMBER.OF.NODES)
  3689.       PUT 2,1                   ' write out blank checkpoint record
  3690.       FOR J = 2 TO FIRST.MESSAGE.RECORD-1
  3691.         GOSUB 31050
  3692.         PUT 2                   ' write out "door" records of new file
  3693.         GOSUB 25030
  3694.       NEXT
  3695.       FOR J = FIRST.MESSAGE.RECORD TO HIGHEST.MESSAGE.RECORD
  3696.         LSET RR$  =  SPACE$(128)
  3697.         PUT 2                   ' write out messages records of new file
  3698.         GOSUB 25030
  3699.       NEXT
  3700.       HIGHEST.MESSAGE.RECORD = LOC(2)                 ' point to last available message record
  3701.       CLOSE 2
  3702.       GOSUB 30450
  3703.       RETURN
  3704. '
  3705. ' *****************************************************************************
  3706. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD             *
  3707. ' *****************************************************************************
  3708. '
  3709. 30450 CLOSE 2
  3710.       OPEN "R",2,MAIN.MESSAGE.FILE$            ' <---- update MESSAGES checkpoint record
  3711.       FIELD 2,128 AS RR$
  3712.       GET 2,1
  3713.       MID$(RR$,52,46) = SPACE$(46)   'reset all counters before filling
  3714.       MID$(RR$,52,5) = STR$(FIRST.USER.RECORD)   ' 52- 56 = first rec. of msgs file
  3715.       MID$(RR$,57,5) = STR$(CURRENT.USER.COUNT)   ' 57- 61 = next avail. user record
  3716.       MID$(RR$,62,5) = STR$(HIGHEST.USER.RECORD)   ' 62- 66 = last rec. of user file
  3717.       MID$(RR$,68,7) = STR$(FIRST.MESSAGE.RECORD)   ' 68- 74 = first rec. of msgs file
  3718.       MID$(RR$,75,7) = STR$(NEXT.MESSAGE.RECORD)   ' 75- 81 = next avail. msgs record
  3719.       MID$(RR$,82,7) = STR$(HIGHEST.MESSAGE.RECORD)   ' 82- 88 = last rec. of msgs file
  3720.       MID$(RR$,89,7) = STR$(MAXIMUM.NUMBER.OF.MSGS)   ' 89- 95 = maximum number of messages
  3721.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3722.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3723.          HJ$=MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3724.       MID$(RR$,127,2) = HJ$       '127-128 = maximum number of "nodes"
  3725.       PUT 2,1
  3726.       CLOSE 2
  3727.       RETURN
  3728. '
  3729. ' *****************************************************************************
  3730. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE                         *
  3731. ' *****************************************************************************
  3732. '
  3733. 30610 CLOSE 1
  3734.       CLOSE 2
  3735.       OPEN "R",1,MAIN.MESSAGE.FILE$,128        ' <---- adjust size of the MESSAGES file
  3736.       FIELD 1,128 AS MESSAGE.RECORD$         ' Open old MESSAGES file
  3737.       A$ = MAIN.MESSAGE.FILE$
  3738.       GOSUB 50095
  3739.       OPEN "R",2,A$,128         ' Open new MESSAGES file
  3740.       FIELD 2,128 AS RR$
  3741.       A$="Copying"
  3742.       OE = B1
  3743.       IF MAXIMUM.NUMBER.OF.NODES<=B1 THEN _
  3744.          OE = MAXIMUM.NUMBER.OF.NODES
  3745.       GOSUB 50340
  3746.       FOR J=1 TO OE + 1
  3747.         GET 1,J
  3748.         LSET RR$ = MESSAGE.RECORD$              ' write out existing checkpoint and
  3749.         PUT 2                    ' existing "door" records
  3750.         GOSUB 25030
  3751.       NEXT
  3752.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3753.          GOTO 30780
  3754.       FOR J  =  OE + 1 TO B1
  3755.         GOSUB 31050
  3756.         PUT 2                    ' write out expansion "door" records
  3757.         GOSUB 25030
  3758.       NEXT
  3759. 30780 MAXIMUM.NUMBER.OF.NODES=B1                      ' set value for maximum number of nodes
  3760.       FOR J = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
  3761. 30830   GET 1,J
  3762.         IF PURGE <> -1 THEN _
  3763.            GOTO 30840
  3764.         IF MID$(MESSAGE.RECORD$,116,1)=CHR$(225) THEN _
  3765.            PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
  3766.            GOTO 30840
  3767.         IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
  3768.            PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + "          purged..." : _
  3769.            J=LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,6)) : _
  3770.            GOTO 30830
  3771. 30840   LSET RR$ = MESSAGE.RECORD$
  3772.         PUT 2                    ' write out existing message records
  3773.         GOSUB 25030
  3774.       NEXT
  3775.       B1=LOC(2) + 1                ' get new file's next message record
  3776.       CLOSE 1
  3777.       IF B3! < LOC(2) + 1 THEN _
  3778.          GOTO 30960
  3779.       IF PURGE THEN _
  3780.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3781.          PURGE = 0 : _
  3782.          A$ = "Preformatting"
  3783.       GOSUB 25030
  3784.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3785.         LSET RR$  =  SPACE$(128)
  3786.         PUT 2                    ' write out expansion message records
  3787.         LOCATE 24,X
  3788.         PRINT LOC(2);
  3789.       NEXT
  3790. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3791.       NEXT.MESSAGE.RECORD = B1
  3792.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3793.       CLOSE 2
  3794. 30980 XX$ = "Delete the old " + MAIN.MESSAGE.FILE$ + " file? (YES or NO)?"
  3795.       GOSUB 50345
  3796.       GOSUB 22380
  3797.       ON AB GOTO 31000,31020,30980,30980
  3798. 31000 A$ = MAIN.MESSAGE.FILE$
  3799.       GOSUB 50096
  3800.       NAME MAIN.MESSAGE.FILE$ AS A$
  3801.       GOTO 31030
  3802. 31020 KILL MAIN.MESSAGE.FILE$
  3803. 31030 A$ = MAIN.MESSAGE.FILE$
  3804.       GOSUB 50095
  3805.       NAME A$ AS MAIN.MESSAGE.FILE$
  3806.       GOSUB 30450
  3807. 31035 RETURN
  3808. '
  3809. ' *****************************************************************************
  3810. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE     *
  3811. ' *****************************************************************************
  3812. '
  3813. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3814.       RETURN
  3815. '
  3816. ' *****************************************************************************
  3817. ' * COMMON SUBROUTINE TO POSITION CURSOR ON LINE 24, COLUMN 5                 *
  3818. ' *****************************************************************************
  3819. '
  3820. 31060 GOSUB 50340
  3821.       LOCATE 24,5
  3822.       RETURN
  3823. '
  3824. ' *****************************************************************************
  3825. ' * COMMON SUBROUTINE TO DISPLAY A LINE ON THE USER'S TERMINAL                *
  3826. ' *****************************************************************************
  3827. '
  3828. 31070 IROW = IROW + 1
  3829.       LOCATE IROW,ICOL
  3830.       PRINT XYZ$;
  3831.       RETURN
  3832. '
  3833. ' *****************************************************************************
  3834. ' * ROUTINE TO CREATE A NEW USERS FILE                                        *
  3835. ' *****************************************************************************
  3836. '
  3837. 50000 OPEN "R",2,MAIN.USER.FILE$            ' <---- create a new USERS file
  3838.       FIELD 2,128 AS U$
  3839.       GOSUB 50340
  3840.       A$ = "creating preformatted"
  3841.       GOSUB 25020
  3842.       FOR J = FIRST.USER.RECORD TO HIGHEST.USER.RECORD
  3843.         LSET U$  =  SPACE$(128)
  3844.         PUT 2
  3845.         LOCATE 24,X
  3846.         PRINT J;
  3847.       NEXT
  3848.       CLOSE 2
  3849.       RETURN
  3850. '
  3851. ' *****************************************************************************
  3852. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION     *
  3853. ' *****************************************************************************
  3854. '
  3855. 50095 IF INSTR(A$,".") THEN _
  3856.          A$ = MID$(A$,1,INSTR(A$,".")-1) + ".BAK" : _
  3857.          RETURN _
  3858.       ELSE A$ = A$ + ".BAK" : _
  3859.       RETURN
  3860. '
  3861. ' *****************************************************************************
  3862. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION   *
  3863. ' *****************************************************************************
  3864. '
  3865. 50096 IF INSTR(A$,".") THEN _
  3866.          A$ = MID$(A$,1,INSTR(A$,".")-1) + ".OLD" : _
  3867.          RETURN _
  3868.       ELSE A$ = A$ + ".OLD" : _
  3869.       RETURN
  3870. '
  3871. ' *****************************************************************************
  3872. ' * COMMON SUBROUTINE TO CREATE A NEW MESSAGES FILE                           *
  3873. ' *****************************************************************************
  3874. '
  3875.       OPEN "R",2,MAIN.MESSAGE.FILE$
  3876.       FIELD 2,128 AS RR$
  3877.       IF F = 1 THEN _
  3878.          CALLS.TODATE! = 1
  3879.       GOSUB 50340
  3880.       LSET RR$ = " 1      " + SPACE$(118) + STR$(MAXIMUM.NUMBER.OF.NODES)
  3881.       PUT 2,1                       ' write out first record of new file
  3882.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  3883.         GOSUB 31050
  3884.         PUT 2                       ' write out "door" records of new file
  3885.         GOSUB 25030
  3886.       NEXT
  3887.       FIRST.MESSAGE.RECORD = LOC(2) + 1      ' point to first message record
  3888.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD   ' point to next available message record
  3889.       IF MAXIMUM.NUMBER.OF.NODES + 1 = MAX.MSG.FILE.SIZE.FRM.DEF! THEN _
  3890.          GOTO 50270
  3891.       FOR J! = MAXIMUM.NUMBER.OF.NODES + 2 TO MAX.MSG.FILE.SIZE.FRM.DEF!
  3892.         LSET RR$  =  SPACE$(128)
  3893.         PUT 2                          ' write out messages records of new file
  3894.         GOSUB 25030
  3895.       NEXT
  3896. 50270 HIGHEST.MESSAGE.RECORD = LOC(2)                  ' point to last available message record
  3897.       GOSUB 30040
  3898.       RETURN
  3899. '
  3900. ' *****************************************************************************
  3901. ' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24            *
  3902. ' *****************************************************************************
  3903. '
  3904. 50340 I! = FRE(C$)
  3905.       LOCATE 24,1
  3906.       PRINT STRING$(79,32);
  3907.       RETURN
  3908. '
  3909. ' *****************************************************************************
  3910. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24                         *
  3911. ' *****************************************************************************
  3912. '
  3913. 50345 GOSUB 50340
  3914. 50346 LOCATE 24,5
  3915.       PRINT XX$;
  3916.       RETURN
  3917. 50350 F$ = MAIN.USER.FILE$
  3918.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3919.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".")-1)
  3920.       RETURN
  3921. '
  3922. ' *****************************************************************************
  3923. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE                         *
  3924. ' *****************************************************************************
  3925. '
  3926. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3927. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3928. 50500 OPEN "R",1,MAIN.USER.FILE$
  3929.       IF MAX.USR.FILE.SIZE.FRM.DEF < LOF(1)/128 THEN _
  3930.          MAX.USR.FILE.SIZE.FRM.DEF = LOF(1)/128
  3931.       UG = LOF(1)/128
  3932.       CLOSE 1
  3933.       RETURN
  3934. '
  3935. ' *****************************************************************************
  3936. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE                      *
  3937. ' *****************************************************************************
  3938. '
  3939. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5*MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3940. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3941. 50550 OPEN "R",1,MAIN.MESSAGE.FILE$
  3942.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1)/128 THEN _
  3943.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1)/128
  3944.       CLOSE 1
  3945.       RETURN
  3946. '
  3947. ' *****************************************************************************
  3948. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS    *
  3949. ' *****************************************************************************
  3950. '
  3951. 50580 OLD = LOC(1)
  3952.       GET 1,I + 1
  3953.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3954.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3955.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  3956.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  3957.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3958.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3959.          RETURN
  3960.       PRINT "Message chain broken at record number " + STR$(OLD)
  3961.       PRINT "Message chain repair in progress!
  3962.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD-1
  3963.         GET 1,IQ
  3964.         IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3965.          OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3966.          AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  3967.          AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  3968.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3969.          AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3970.          GOTO 50660
  3971.       NEXT
  3972.       GOTO 23730
  3973. '
  3974. ' *****************************************************************************
  3975. ' * COMMON ROUTINE TO CONVERT FROM LOWER TO UPPER CASE                        *
  3976. ' *****************************************************************************
  3977. '
  3978. 50654 ' Convert Lower Case to Upper Case -------
  3979.       FOR Z = 1 TO LEN(HJ$)
  3980.         MID$(HJ$,Z,1) = CHR$(ASC(MID$(HJ$,Z,1)) + 32*(ASC(MID$(HJ$,Z,1))>96))
  3981.         NEXT
  3982.       RETURN
  3983. '
  3984. ' *****************************************************************************
  3985. ' * COMMON SUBROUTINE TO SKIP TO THE NEXT GOOD MESSAGE HEADER IF CHAIN BORKEN *
  3986. ' *****************************************************************************
  3987. '
  3988. 50660 GET 1,OLD
  3989.       MID$(MESSAGE.RECORD$,117,6) = STR$(IQ-OLD)
  3990.       PUT 1,OLD
  3991.       PRINT "Message chain repaired.
  3992.       I = IQ
  3993.       RETURN
  3994. '
  3995. ' *****************************************************************************
  3996. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD # *
  3997. ' *****************************************************************************
  3998. '
  3999. 50720 JX = LEN.HASH
  4000.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  4001.         JX = JX-1
  4002.       WEND
  4003.       X$ = MID$(HASH.VALUE$,1,JX)
  4004.       UIX# = FNHSH(X$)
  4005.       Q = FNHSH2(X$)
  4006.       NSR = 1
  4007.       RO = CSRLIN
  4008.       CO = POS(0)
  4009. 50722 GET 2,UIX#
  4010.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  4011.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  4012.          GOTO 50730
  4013.       UIX# = UIX# + Q
  4014.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  4015.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  4016.       NSR = NSR + 1
  4017.       LOCATE RO,CO
  4018.       PRINT "searching";UIX#;
  4019.       GOTO 50722
  4020. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  4021.        PUT 2,UIX#
  4022.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  4023.       LOCATE RO,CO
  4024.       PRINT "to pos#";UIX#;" /";NSR;" srch(s)"
  4025.       RETURN
  4026. '
  4027. ' *****************************************************************************
  4028. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE       *
  4029. ' *****************************************************************************
  4030. '
  4031. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  4032.       GOSUB 25020
  4033.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  4034.         LSET USER.RECORD.N$       = TEMPLATE$
  4035.         PUT 2
  4036.         LOCATE 24,X
  4037.         PRINT J;
  4038.       NEXT
  4039.       RETURN
  4040. '
  4041. ' *****************************************************************************
  4042. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES          *
  4043. ' *****************************************************************************
  4044. '
  4045. 59000 GOSUB 50340
  4046.       IF EXPERT.USER$ = "NOVICE" THEN _
  4047.          EXPERT.USER = 0
  4048.       IF EXPERT.USER$ = "EXPERT" THEN _
  4049.          EXPERT.USER = -1
  4050.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  4051.       PROMPT.BELL = -1
  4052.       IF PROMPT.BELL$ = "OFF" THEN _
  4053.          PROMPT.BELL = 0
  4054.       PAGING.PRINTER.SUPPORT$ = ". "
  4055.       IF M11$ = "YES" THEN _
  4056.          PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7)
  4057.       CODE.TYPE = FALSE
  4058.       IF CODE.TYPE$ = "COMPILED" THEN _
  4059.          CODE.TYPE = TRUE
  4060.       GOSUB 15780
  4061.       BULLETINS.OPTIONAL = FALSE
  4062.       IF BULLETINS.OPTIONAL$ = "YES" THEN _
  4063.          BULLETINS.OPTIONAL = TRUE
  4064.       MESSAGE.REMINDER = FALSE
  4065.       IF MESSAGE.REMINDER$ = "YES" THEN _
  4066.          MESSAGE.REMINDER = TRUE
  4067.       REQUIRE.NON.ASCII = FALSE
  4068.       IF REQUIRE.NON.ASCII$ = "YES" THEN _
  4069.          REQUIRE.NON.ASCII = TRUE
  4070.       WELCOME.INTERRUPTABLE = FALSE
  4071.       IF WELCOME.INTERRUPTABLE$ = "YES" THEN _
  4072.          WELCOME.INTERRUPTABLE = TRUE
  4073.       REMIND.FILE.TRANSFERS = FALSE
  4074.       IF REMIND.FILE.TRANSFERS$ = "YES" THEN _
  4075.          REMIND.FILE.TRANSFERS = TRUE
  4076.       REMIND.PROFILE = FALSE
  4077.       IF REMIND.PROFILE$ = "YES" THEN _
  4078.          REMIND.PROFILE = TRUE
  4079.       DOORS.AVAILABLE = FALSE
  4080.       IF DOORS.AVAILABLE$ = "YES" THEN _
  4081.          DOORS.AVAILABLE = TRUE
  4082.       LIMIT.DAILY.TIME = FALSE
  4083.       IF LIMIT.DAILY.TIME$ = "YES" THEN _
  4084.          LIMIT.DAILY.TIME = TRUE
  4085.       COMMANDS.BETWEEN.RINGS = FALSE
  4086.       IF COMMANDS.BETWEEN.RINGS$ = "YES" THEN _
  4087.          COMMANDS.BETWEEN.RINGS = TRUE
  4088.       MNP.SUPPORT = FALSE
  4089.       IF MNP.SUPPORT$ = "YES" THEN _
  4090.          MNP.SUPPORT = TRUE
  4091.       WILL.SUBDIRS.B.USED = FALSE
  4092.       IF WILL.SUBDIRS.B.USED$ = "YES" THEN _
  4093.          WILL.SUBDIRS.B.USED = TRUE
  4094.       UPLOAD.TO.SUBDIR = FALSE
  4095.       IF UPLOAD.TO.SUBDIR$ = "YES" THEN _
  4096.          UPLOAD.TO.SUBDIR = TRUE
  4097.       DOWNLOAD.TO.SUBDIR = FALSE
  4098.       IF DOWNLOAD.TO.SUBDIR$ = "YES" THEN _
  4099.          DOWNLOAD.TO.SUBDIR = TRUE
  4100.       RESTRICT.BAUD = FALSE
  4101.       IF RESTRICT.BAUD$ = "YES" THEN _
  4102.          RESTRICT.BAUD = TRUE
  4103.       IF RESTRICT.BAUD$="YES=Registered users" THEN _
  4104.          RESTRICT.BAUD=-2
  4105.       USE.COLOR = FALSE
  4106.       IF USE.COLOR$ = "YES" THEN _
  4107.          USE.COLOR = TRUE
  4108.       DISKFULL.GO.OFFLINE = FALSE
  4109.       IF DISKFULL.GO.OFFLINE$ = "YES" THEN _
  4110.          DISKFULL.GO.OFFLINE = TRUE
  4111.       EXTENDED.LOGGING = FALSE
  4112.       IF EXTENDED.LOGGING$ = "YES" THEN _
  4113.          EXTENDED.LOGGING = TRUE
  4114.       DUMB.MODEM = FALSE
  4115.       IF DUMB.MODEM$ = "YES" THEN _
  4116.          DUMB.MODEM = TRUE
  4117.       COMMENTS.AS.MESSAGES=FALSE
  4118.       IF COMMENTS.AS.MESSAGES$="YES" THEN _
  4119.          COMMENTS.AS.MESSAGES=TRUE
  4120.       TURBO.RBBS = FNYESNO(TURBO.RBBS$)
  4121.       LIMIT.SEARCH.TO.FMS = FNYESNO(LIMIT.SEARCH.TO.FMS$)
  4122.       NEW.FILES.CHECK = FNYESNO(NEW.FILES.CHECK$)
  4123.       SHOW.SECTION = FNYESNO(SHOW.SECTION$)
  4124.       COMMANDS.IN.PROMPT = FNYESNO(COMMANDS.IN.PROMPT$)
  4125.       NEWUSER.SETS.DEFAULTS = FNYESNO(NEWUSER.SETS.DEFAULTS$)
  4126.       REMEMBER.NEW.USERS = FNYESNO(REMEMBER.NEW.USERS$)
  4127.       SURVIVE.NOUSER.ROOM = FNYESNO(SURVIVE.NOUSER.ROOM$)
  4128.       TURN.PRINTER.OFF = FNYESNO(TURN.PRINTER.OFF$)
  4129.       MUSIC = FNYESNO(MUSIC$)
  4130.       RESTRICT.BY.DATE = FNYESNO (RESTRICT.BY.DATE$)
  4131.       REDIRECT.IO.METHOD = FNYESNO(REDIRECT.IO.METHOD$)
  4132.       GO.TO.SHELL = TRUE
  4133.       IF GO.TO.SHELL$ = "EXIT RBBS" THEN _
  4134.          GO.TO.SHELL = FALSE
  4135.       IF REQUIRED.QUESTIONNAIRE$ = "NONE" THEN _
  4136.          REQUIRED.QUESTIONNAIRE$ = ""
  4137.       MLCOM = FNYESNO(MLCOM$)
  4138.       SHOOT.YOURSELF = FNYESNO(SHOOT.YOURSELF$)
  4139.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  4140.          MAIN.MESSAGE.FILE$ = MAINMSG$
  4141.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  4142.          MAIN.USER.FILE$ = MAINUSR$
  4143.       IF F THEN _
  4144.          GOSUB 30040
  4145. 59020 OPEN "O",#1,CONFIG.FILENAME$
  4146.       IF INSTR(MO$,":") < 1 THEN _
  4147.          MO$ = MO$ + ":
  4148.       IF INSTR(SJ$,":") < 1 THEN _
  4149.          SJ$ = SJ$ + ":
  4150.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  4151.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + ":
  4152.       T$ = DIRECTORY.EXTENTION$
  4153.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  4154.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  4155.       S$ = UPLOAD.DIRECTORY$
  4156.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  4157.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".")-1)
  4158.       DIRECTORY.EXTENTION$ = T$
  4159.       UPLOAD.DIRECTORY$ = S$
  4160.       IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
  4161.          DNLD.SUB = 0 : _
  4162.          FOR I = 1 TO 99 : _
  4163.             DNLD$(I) = "" : _
  4164.          NEXT
  4165.       IF UPLOAD.TO.SUBDIR$   = "NO" THEN _
  4166.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + ":"
  4167.       IF UPLOAD.TO.SUBDIR$   = "YES" AND UPLOAD.SUBDIR$<>"" THEN _
  4168.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  4169.       IF REQUIRED.RINGS = 0 AND _
  4170.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)<>"1  " THEN _
  4171.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="1  "
  4172.       IF REQUIRED.RINGS > 0 AND _
  4173.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="0  " THEN _
  4174.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="254"
  4175. '
  4176. ' *****************************************************************************
  4177. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION *
  4178. ' *****************************************************************************
  4179. '
  4180. 59030 WRITE #1,DOWNLOAD.DRIVES$, _
  4181.                SYSOP.PASSWORD.1$, _
  4182.                SYSOP.PASSWORD.2$, _
  4183.                SYSOP.FIRST.NAME$, _
  4184.                SYSOP.LAST.NAME$, _
  4185.                REQUIRED.RINGS, _
  4186.                START.OFFICE.HOURS, _
  4187.                END.OFFICE.HOURS, _
  4188.                MINUTES.PER.SESSION!, _
  4189.                MAX.ALLOWED.MSGS.FRM.DEF, _
  4190.                ACT.MNTHS.B4.DELETING, _
  4191.                UPLOAD.DIRECTORY$,_
  4192.                EXPERT.USER, _
  4193.                ACTIVE.BULLETINS, _
  4194.                PROMPT.BELL, _
  4195.                PCJR, _
  4196.                CODE.TYPE, _
  4197.                MENU$(1), _
  4198.                MENU$(2), _
  4199.                MENU$(3), _
  4200.                MENU$(4), _
  4201.                MENU$(5), _
  4202.                CONFERENCE.MENU$, _
  4203.                CONFERENCE.VIEWER.SEC.LVL, _
  4204.                WELCOME.INTERRUPTABLE, _
  4205.                REMIND.FILE.TRANSFERS, _
  4206.                PAGE.LENGTH, _
  4207.                MAX.MESSAGE.LINES, _
  4208.                DOORS.AVAILABLE, _
  4209.                MO$
  4210.       IF INSTR(BULLETIN.MENU$,":")   < 1 THEN _
  4211.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
  4212.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  4213.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + BULLETIN.PREFIX$
  4214.       GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  4215.       FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  4216.       WRITE #1,MAIN.MESSAGE.FILE$, _
  4217.                MAIN.MESSAGE.BACKUP$, _
  4218.                CALLERS.FILE$, _
  4219.                COMMENTS.FILE$, _
  4220.                MAIN.USER.FILE$, _
  4221.                WELCOME.FILE$, _
  4222.                NEWUSER.FILE$, _
  4223.                DIRECTORY.EXTENTION$, _
  4224.                COM.PORT$, _
  4225.                BULLETINS.OPTIONAL, _
  4226.                USER.INIT.COMMAND$, _
  4227.                DUMMY6$, _
  4228.                DOS.VERSION, _
  4229.                FG, _
  4230.                BG, _
  4231.                BORDER, _
  4232.                RBBS.BAT$, _
  4233.                RCTTY.BAT$
  4234.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  4235.                DUMMY$, _
  4236.                HELP$(3), _
  4237.                HELP$(4), _
  4238.                HELP$(7), _
  4239.                HELP$(9), _
  4240.                BULLETIN.MENU$, _
  4241.                BULLETIN.PREFIX$, _
  4242.                DRIVE.FOR.BULLETINS$, _
  4243.                MESSAGE.REMINDER, _
  4244.                REQUIRE.NON.ASCII, _
  4245.                DOORS.SECURITY.LEVEL, _
  4246.                MAXIMUM.NUMBER.OF.NODES, _
  4247.                NETWORK.TYPE, _
  4248.                RECYCLE.TO.DOS, _
  4249.                MAX.USR.FILE.SIZE.FRM.DEF, _
  4250.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  4251.                TRASHCAN.FILE$
  4252.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  4253.                DEFAULT.SECURITY.LEVEL, _
  4254.                SYSOP.SECURITY.LEVEL, _
  4255.                FILESEC.FILE$, _
  4256.                SYSOP.MENU.SECURITY.LEVEL, _
  4257.                LOCAL.PASSWORD$, _
  4258.                MAXIMUM.VIOLATIONS, _
  4259.                SYSOP.FUNCTION(1), _
  4260.                SYSOP.FUNCTION(2), _
  4261.                SYSOP.FUNCTION(3), _
  4262.                SYSOP.FUNCTION(4), _
  4263.                SYSOP.FUNCTION(5), _
  4264.                SYSOP.FUNCTION(6), _
  4265.                SYSOP.FUNCTION(7), _
  4266.                PASSWORD.FILE$, _
  4267.                MAXIMUM.PASSWORD.CHANGES, _
  4268.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  4269.                OVERWRITE.SECURITY.LEVEL, _
  4270.                DOORS.TERMINAL.TYPE, _
  4271.                LIMIT.DAILY.TIME
  4272.       WRITE #1,MAIN.FUNCTION(1), _
  4273.                MAIN.FUNCTION(2), _
  4274.                MAIN.FUNCTION(3), _
  4275.                MAIN.FUNCTION(4), _
  4276.                MAIN.FUNCTION(5), _
  4277.                MAIN.FUNCTION(6), _
  4278.                MAIN.FUNCTION(7), _
  4279.                MAIN.FUNCTION(8), _
  4280.                MAIN.FUNCTION(9), _
  4281.                MAIN.FUNCTION(10), _
  4282.                MAIN.FUNCTION(11), _
  4283.                MAIN.FUNCTION(12), _
  4284.                MAIN.FUNCTION(13), _
  4285.                MAIN.FUNCTION(14), _
  4286.                MAIN.FUNCTION(15), _
  4287.                MAIN.FUNCTION(16), _
  4288.                MAIN.FUNCTION(17), _
  4289.                DUMMY$, _
  4290.                WAIT.BEFORE.DISCONNECT
  4291.       WRITE #1,FILES.FUNCTION(1), _
  4292.                FILES.FUNCTION(2), _
  4293.                FILES.FUNCTION(3), _
  4294.                FILES.FUNCTION(4), _
  4295.                FILES.FUNCTION(5), _
  4296.                FILES.FUNCTION(6), _
  4297.                FILES.FUNCTION(7), _
  4298.                UTILITY.FUNCTION(1), _
  4299.                UTILITY.FUNCTION(2), _
  4300.                UTILITY.FUNCTION(3), _
  4301.                UTILITY.FUNCTION(4), _
  4302.                UTILITY.FUNCTION(5), _
  4303.                UTILITY.FUNCTION(6), _
  4304.                UTILITY.FUNCTION(7), _
  4305.                UTILITY.FUNCTION(8), _
  4306.                UTILITY.FUNCTION(9), _
  4307.                UTILITY.FUNCTION(10), _
  4308.                UTILITY.FUNCTION(11), _
  4309.                GLOBAL.FUNCTION(1), _
  4310.                GLOBAL.FUNCTION(2), _
  4311.                GLOBAL.FUNCTION(3), _
  4312.                GLOBAL.FUNCTION(4), _
  4313.                UPLOAD.TIME.FACTOR!, _
  4314.                COMPUTER.TYPE, _
  4315.                REMIND.PROFILE, _
  4316.                RBBS.NAME$, _
  4317.                COMMANDS.BETWEEN.RINGS, _
  4318.                MNP.SUPPORT, _
  4319.                PAGING.PRINTER.SUPPORT$, _
  4320.                MODEM.INIT.BAUD$
  4321. 59035 WRITE #1,TURN.PRINTER.OFF,_
  4322.                DIRECTORY.PATH$,_
  4323.                MIN.SEC.TO.VIEW, _
  4324.                LIMIT.SEARCH.TO.FMS, _
  4325.                DEFAULT.CATEGORY.CODE$, _
  4326.                DIR.CATEGORY.FILE$, _
  4327.                NEW.FILES.CHECK, _
  4328.                MAX.DESC.LEN, _
  4329.                SHOW.SECTION, _
  4330.                COMMANDS.IN.PROMPT, _
  4331.                NEWUSER.SETS.DEFAULTS, _
  4332.                HELP.PATH$, _
  4333.                HELP.EXTENSION$, _
  4334.                MAIN.COMMANDS$, _
  4335.                FILE.COMMANDS$, _
  4336.                UTIL.COMMANDS$, _
  4337.                GLOBAL.COMMANDS$, _
  4338.                SYSOP.COMMANDS$
  4339.       WRITE #1,UPLOAD.PATH$, _
  4340.                FMS.DIRECTORY$, _
  4341.                ANS.MENU$, _
  4342.                REQUIRED.QUESTIONNAIRE$, _
  4343.                REMEMBER.NEW.USERS, _
  4344.                SURVIVE.NOUSER.ROOM, _
  4345.                PROMPT.HASH$, _
  4346.                START.HASH, _
  4347.                LEN.HASH, _
  4348.                PROMPT.INDIV$, _
  4349.                START.INDIV, _
  4350.                LEN.INDIV
  4351.       WRITE #1,BYPASS.MSGS, _
  4352.                MUSIC, _
  4353.                RESTRICT.BY.DATE, _
  4354.                DAYS.TO.WARN, _
  4355.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  4356.                CALLBACK.VERIFICATION, _
  4357.                RESTRICT.VALID.CMDS, _
  4358.                NEW.USER.DEFAULT.MODE, _
  4359.                NEW.USER.LINE.FEEDS, _
  4360.                NEW.USER.NULLS, _
  4361.                NEW.USER.BELL, _
  4362.                NEW.USER.CASE, _
  4363.                NEW.USER.MARGINS, _
  4364.                WRAP.CALLERS.FILE$, _
  4365.                REDIRECT.IO.METHOD, _
  4366.                GO.TO.SHELL, _
  4367.                HALT.ON.ERROR, _
  4368.                NEW.PUBLIC.MSGS.SECURITY, _
  4369.                NEW.PRIVATE.MSGS.SECURITY, _
  4370.                SECURITY.NEEEDED.TO.CHANGE.MSGS, _
  4371.                SL.CATEGORIZE.UPLOADS, _
  4372.                BAUDOT, _
  4373.                TIME.TO.DROP.TO.DOS, _
  4374.                EXPIRED.SECURITY, _
  4375.                DTR.DROP.DELAY, _
  4376.                ASK.IDENTITY, _
  4377.                USE.EXTERNAL.XMODEM, _
  4378.                BUFFER.SIZE, _
  4379.                MLCOM, _
  4380.                SHOOT.YOURSELF, _
  4381.                F7.MESSAGE$, _
  4382.                NEW.USER.DEFAULT.PROTOCOL$, _
  4383.                NEW.USER.GRAPHICS$, _
  4384.                NET.MAIL$, _
  4385.                MASTER.DIRECTORY.NAME$, _
  4386.                PROTOCOL.PATH$, _
  4387.                UPCAT.HELP$, _
  4388.                ALWAYS.STREW.TO$, _
  4389.                DUMMY1$
  4390.       IF COM.PORT$ = "COM1" THEN _
  4391.          LSB = &H3F8 : _
  4392.          MSB = &H3F9 : _
  4393.          LINE.CONTROL.REGISTER = &H3FB : _
  4394.          MODEM.CONTROL.REGISTER = &H3FC : _
  4395.          LINE.STATUS.REGISTER = &H3FD : _
  4396.          MODEM.STATUS.REGISTER = &H3FE
  4397.       IF COM.PORT$ = "COM2" OR PCJR = 1 THEN _
  4398.          LSB = &H2F8 : _
  4399.          MSB = &H2F9 : _
  4400.          LINE.CONTROL.REGISTER = &H2FB : _
  4401.          MODEM.CONTROL.REGISTER = &H2FC : _
  4402.          LINE.STATUS.REGISTER = &H2FD : _
  4403.          MODEM.STATUS.REGISTER = &H2FE
  4404.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  4405.                MODEM.INIT.WAIT.TIME, _
  4406.                MODEM.COMMAND.DELAY.TIME, _
  4407.                TURBO.RBBS, _
  4408.                DNLD.SUB, _
  4409.                WILL.SUBDIRS.B.USED, _
  4410.                UPLOAD.TO.SUBDIR, _
  4411.                DOWNLOAD.TO.SUBDIR, _
  4412.                UPLOAD.SUBDIR$, _
  4413.                RESTRICT.BAUD, _
  4414.                USE.COLOR, _
  4415.                DISKFULL.GO.OFFLINE, _
  4416.                EXTENDED.LOGGING, _
  4417.                USER.RESET.COMMAND$, _
  4418.                USER.COUNT.RINGS.COMMAND$, _
  4419.                USER.ANSWER.COMMAND$, _
  4420.                USER.GO.OFFHOOK.COMMAND$, _
  4421.                DISK.FOR.DOS$, _
  4422.                DUMB.MODEM, _
  4423.                COMMENTS.AS.MESSAGES, _
  4424.                LSB, _
  4425.                MSB, _
  4426.                LINE.CONTROL.REGISTER, _
  4427.                MODEM.CONTROL.REGISTER, _
  4428.                LINE.STATUS.REGISTER, _
  4429.                MODEM.STATUS.REGISTER
  4430.       IF DNLD.SUB<1 OR DNLD.SUB>99 THEN _
  4431.          GOTO 59080
  4432.       FOR I = 1 TO DNLD.SUB
  4433.          WRITE #1,DNLD$(I)
  4434.       NEXT
  4435. 59080 CLOSE #1
  4436. '
  4437. ' *****************************************************************************
  4438. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN *
  4439. ' *****************************************************************************
  4440. '
  4441.       CLS
  4442.       LOCATE 12,1,1
  4443.       PRINT "RBBS-PC configuration description file, " + CONFIG.FILENAME$ + ", now on default drive."
  4444.       GOSUB 60380
  4445.       GOTO 60340
  4446. '
  4447. ' *****************************************************************************
  4448. ' *  CONFIG.BAS'S ERROR ROUTINES                                              *
  4449. ' *****************************************************************************
  4450. '
  4451.       REM
  4452. 60010 REM * HANDLE ERROR CONDITIONS *
  4453.       ' PRINT ERR,ERL : STOP
  4454.       IF ERR = 53 AND ERL = 30010 THEN _
  4455.          RESUME 30030
  4456.       IF ERR = 58 AND ERL = 30010 THEN _
  4457.          RESUME 30020
  4458.       IF ERR = 62 AND _
  4459.         (ERL = 11600 OR _
  4460.          ERL = 11620 OR _
  4461.          ERL = 11640 OR _
  4462.          ERL = 11660 OR _
  4463.          ERL = 11680 OR _
  4464.          ERL = 11700 OR _
  4465.          ERL = 11705 OR _
  4466.          ERL = 11706) THEN _
  4467.          PRINT CONFIG.FILENAME$ + _
  4468.                " from a version earlier than CPC15.1 on default drive." : _
  4469.          PRINT "Please delete and rerun CONFIG." : _
  4470.          RESUME 60340
  4471.       IF ERL = 31000 AND ERR = 58 THEN _
  4472.          KILL A$ : _
  4473.          RESUME 31000
  4474.       IF ERL = 31030 AND ERR = 58 THEN _
  4475.          KILL A$ : _
  4476.          RESUME 31030
  4477.       IF ERL = 22120 AND ERR = 6 THEN _
  4478.          RESUME 22100
  4479.       IF ERL = 24750 AND ERR = 58 THEN _
  4480.          KILL A$ : _
  4481.          RESUME 24750
  4482.       IF ERL = 31020 THEN _
  4483.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4484.          RESUME 31035
  4485.       IF (ERL = 50490 OR ERL = 50540) AND ERR = 58 THEN  _
  4486.          RESUME 50500
  4487.       IF ERL = 50490 OR ERL = 50540 THEN _
  4488.          RESUME 15230
  4489.       IF ERR = 61 THEN _
  4490.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4491.          RESUME 60340
  4492.       IF ERR = 67 THEN _
  4493.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4494.          RESUME 60340
  4495.       IF ERR = 70 THEN _
  4496.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4497.          RESUME 60340
  4498.       IF ERR = 71 THEN _
  4499.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4500.          RESUME 60340
  4501.       IF ERR = 72 THEN _
  4502.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4503.          RESUME 60340
  4504.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4505. 60340 IF F = 1 THEN _
  4506.          DELAY! = FNTI! + 5
  4507.       GOSUB 60440
  4508. 60360 SYSTEM
  4509. '
  4510. ' *****************************************************************************
  4511. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP                                    *
  4512. ' *****************************************************************************
  4513. '
  4514. 60380 FOR I = 1 TO 3
  4515.         SOUND 1000*I,1
  4516.       NEXT
  4517.       RETURN
  4518. '
  4519. ' *****************************************************************************
  4520. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS                      *
  4521. ' *****************************************************************************
  4522. '
  4523. 60440 ' wait routine
  4524. 60450 IF FNTI! < DELAY! THEN _
  4525.          GOTO 60450 ELSE _
  4526.       RETURN
  4527.